• ベストアンサー

Excel-VBAで連番を振るマクロをつくりたい

白紙のSheet1に、下記の3法則により数値を記入するVBAをご教示ください。 (1) A列に20001から24000まで連番を振る、  ただし連番は、単に1ずつでなく同じ番号が12回振られて1増加する (2) B列に2004年12月から2005年11月までの年月を表す6桁数値を12か月分コピーを繰り返す (3) C列に、A列とB列を結合して数値変換する式を入力(式でなくてもよいですが)  例:C1列は、    Range("C1").Select    ActiveCell.FormulaR1C1 = "=(RC[-2]&RC[-1])*1" A列  B列  C列 20001 200412 20001200412 20001 200501 20001200501 20001 200502 20001200502 20001 200503 20001200503 20001 200504 20001200504 20001 200505 20001200505 20001 200506 20001200506 20001 200507 20001200507 20001 200508 20001200508 20001 200509 20001200509 20001 200510 20001200510 20001 200511 20001200511 20002 200412 20002200412 20002 200501 20002200501 20002 200502 20002200502 20002 200503 20002200503 20002 200504 20002200504  : 24000 200511 24000200511 PHPでなら下記のようにして実現できるのですが、移植できません… <?php  for($i=20001;$i<=24000;$i++){   for ($j=1; $j<=12;$j++){    if ($j==1){     $body .= $i . "&nbsp;200412&nbsp;" . $i . "200412<br>\n";    } elseif ( $j == 2 ) {     $body .= $i . "&nbsp;200501&nbsp;" . $i . "200501<br>\n";    } elseif ( $j == 3 ) { 【途中ばっさり省略】    } elseif ( $j == 12 ) {     $body .= $i . "&nbsp;200511&nbsp;" . $i . "200511<br>\n";    }   } } ?> <html> <body> <?= $body ?> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>PHPでなら下記のようにして実現できるのですが、移植できません… CSV出力して読み込ませる方法もありますが・・・? VBAなら Sub tes1() Dim i As Long Dim j As Integer Dim ct As Long ct = 1 For i = 20001 To 24000 For j = 1 To 12 Cells(ct, 1) = i If j = 1 Then Cells(ct, 2) = "200412" Else Cells(ct, 2) = "2005" & Format(j - 1, "00") End If Cells(ct, 3) = Cells(ct, 1) & Cells(ct, 2) ct = ct + 1 Next Next End Sub

litton101
質問者

お礼

hana-hana3さん、レスありがとうございました。 >CSV出力して読み込ませる方法もありますが・・・? それができれば、本件で作るテキストを別途用意しておいて 読み込ませれば本マクロは不要でしたね・・・ ともあれ、また別機会に質問させていただきます。 >VBAなら For構文の書き方がよくわからなかったのですが 大変よく理解できました。活用させていただきます。ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

Dim a(47999, 2) For i = 0 To (UBound(a, 1) + 1) / 12 - 1 For j = 0 To 11 tmp1 = CStr(20001 + i) tmp2 = Format(DateSerial(2004, 12 + j, 1), "yyyymm") a(i * 12 + j, 0) = tmp1 a(i * 12 + j, 1) = tmp2 a(i * 12 + j, 2) = tmp1 + tmp2 Next Next Range(Cells(1, 1), Cells(UBound(a, 1) + 1, UBound(a, 2) + 1)).Value = a

litton101
質問者

お礼

yambejpさん、さすが、分野を問わない博学ぶり、脱帽です。 本当にありがとうございます。 yyyymmの連続性に着目いただき、連続的に処理するというわけですね。 すごい効率よさそうです。 a(47999, 2)の47999は、Excelの日付のシリアル値かとおもいましたが 2031/5/31 ですね、突き止められませんでしたが、調べてみます。 ありがとうございました。

関連するQ&A