- ベストアンサー
EXELについて質問があります。ABCDの縦列にデータが入っているとし
EXELについて質問があります。ABCDの縦列にデータが入っているとします。 ところどころに空白がある個所に0000001から順番にその空白の箇所(ABCD) の箇所に連続次は0000002と簡単に埋めていくプログラミング方法はをおしえて ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
例えばA1セルからD列でA列の終わりの行に相当するセル範囲に空白があるとして、それらにA列からB列…と番号を付けるとしたら次のようなマクロになるでしょう。 Sub 空白セルへの番号入力() Dim RowPos As Integer Dim ColPos As Integer Dim n As Integer Application.ScreenUpdating = False n = 0 arow = Range("A65536").End(xlUp).Row For ColPos = 1 To 4 For RowPos = 1 To arow If Cells(RowPos, ColPos) = "" Then Cells(RowPos, ColPos) = n + 1 Cells(RowPos, ColPos).NumberFormat = "0000000" n = n + 1 End If Next Next Application.ScreenUpdating = True End Sub
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
初心者にはFor Next も思いつきやすくてよいが、エクセルのメニューを良く知っておれば、マクロの記録を使って 編集ージャンプーセル選択ボタンー空白セル、をおこなって、マクロの記録を記録する。作られたコードに対し、下記*の行を加えると出来る。 質問の場合は範囲やFormatの引数を適当に変えてください。 例データ 1 0001 3 0002 3 3 2 3 3 2 0003 3 4 3 0004 0001等が当初は空白とすると、実行後は上記のようになる。 Sub Macro1() Dim cl As Range '* n = 1 '* Range("A1:C5").Select Selection.SpecialCells(xlCellTypeBlanks).Select For Each cl In Selection '* cl = "'" & Format(n, "0000") '* n = n + 1 '* Next ': End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
一例です。 Sub test01() Dim myRng As Range, myC As Range Dim i As Long, n As Long With ActiveSheet Set myRng = Intersect(.Columns("A:D"), .UsedRange).Columns For i = 1 To myRng.Columns.Count n = 0 For Each myC In myRng.Item(i).Cells If myC = "" Then n = n + 1 myC.Value = "'" & CStr(Format(n, "0000000")) End If Next myC Next i End With End Sub
- mt35610
- ベストアンサー率19% (10/51)
エクセルはきちんとバージョンを書きましょう! 処理によってはOS側に依存する部分があるので OSとエクセルのバージョンは必須です! 2003までのバージョンだと・・ Sub Test() Dim i As Long Dim k As Integer Dim c As Long c = 1 For k = 1 To 4 For i = 1 To 65536 If Cells(i, k).Value = "" Then Cells(i, k).Value = c Cells(i, k).NumberFormatLocal = "0000000" c = c + 1 End If Next Next End Sub