• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2003のVBAを教えて)

エクセル2003のVBAを教えて

このQ&Aのポイント
  • エクセル2003のVBAを教えてください。対象データの種類を取り出すVBA、種類の先頭に空白行を追加するVBA、種類が5行以上ある場合に空白行を追加するVBAの結果を示します。
  • エクセル2003のVBAを使用して対象データから種類を取り出し、空白行を追加する方法を教えてください。
  • エクセル2003のVBAを使って対象データの種類を取り出し、空白行を追加する方法を教えてください。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

それじゃこれで Sub A3_1()   Dim i, rtn   i = 1      Do While True     rtn = WorksheetFunction.CountA(Range(Cells(i, 1), Cells(i + 5, 1)))     Select Case rtn       Case 0         Exit Sub       Case 6         Rows((i + 5) & ":" & (i + 5)).Insert Shift:=xlDown     End Select     i = i + 1   Loop End Sub

H45eA
質問者

お礼

返事が遅れました。 すばらしい完璧です。 前回の2つの回答と合わせて、今後のプログラムに応用します。 本当にありがとうございました。

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

VBA勉強中と言う所でしょうか? 簡単な説明も付けましたのであとはご自分で解析してください。 Sub A1()   'フィルタオプションで重複を除いただけ   Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("C1"), Unique:=True End Sub -------------------- Sub A2()   '下から上にA列を見て行き、上のセルが違う「種類」だった時に3行挿入して挿入した2行目にB列の文字を入れる   For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1     If Cells(i, 1) <> Cells(i - 1, 1) Then       Rows(i & ":" & (i + 2)).Insert Shift:=xlDown       Cells(i + 1, 1) = Cells(i + 3, 2)     End If   Next i End Sub -------------------- Sub A3()   '下から上にA列を見て行き、同じ「種類」が5個続いている時、下に1行挿入   For i = Cells(Rows.Count, 1).End(xlUp).Row To 6 Step -1     If WorksheetFunction.CountIf(Range(Cells(i, 1), Cells(i - 4, 1)), Cells(i, 1)) = 5 And (Cells(i - 5, 1) <> Cells(i, 1)) Then       Rows(i + 1).Insert Shift:=xlDown     End If   Next i End Sub

H45eA
質問者

お礼

回答ありがとうございます。 Sub A1()とSub A2()については、OKになりました。 しかし、Sub A3()は、同じ文字が5行以上続くときの2回目以降(10行目、15行目・・・)に空白行が入りません。相談の例題では、行が少なかったのですが、同じ文字が5行以上(100行以上)続くこともあります。 考えられることを試しましたが、今の持てる能力では出来ませんでした。同じ文字が5行以上続くときの2回目以降(10行目、15行目・・・)にも5行ごとに空白1行を入れる方法を教えてください。 Sub A1()、Sub A2()で追加した内容を記載します。 それを見れば今の実力がわかって頂けるのではと思います。 '======================================================== Sub A1()   'フィルタオプションで重複を除いただけ   '元ファイルを生かしてOKにしたプログラム(最初の2行に重複があった場合の重複削除) Dim i As Long Dim 重複 As Worksheet Set 重複 = thisworkbook,Worksheets("ZOO")   With 重複   Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("C1"), Unique:=True 'これでは、先頭行に2行の重複が残る   '.Cells(1,3).Delete Shift:=xlShiftUp これでは、先頭行が単独で重複していない場合、必要セルが消えてしまうのでNG  If .Cells (1,3)=.Cells(2.3) then    'もし、3列の1行目と2行目が重複していたら .Cells (1,3).Delete Shift:=xlShiftUp '1行目を削除     End if End with End Sub '================================================================================= Sub A2()   '下から上にA列を見て行き、上のセルが違う「種類」だった時に3行挿入して挿入した2行目にB列の文字を入れる   '元ファイルを生かしてOKにしたプログラ(最初に3行を追加) Dim i As Long Dim 三行追加 As Worksheet Set 三行追加 = thisworkbook,Worksheets("ZOO")   With 三行追加    For i = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1     If Cells(i, 1) <> Cells(i - 1, 1) Then       .Rows(i & ":" & (i + 2)).Insert Shift:=xlDown       .Cells(i + 1, 1) = Cells(i + 3, 2)     End If   Next i   '先頭に三行追加(1*3=3を1+1+1=3として計算しているのと同じ方法です。)    .Cells(1,1).EntireRow.Insert    .Cells(1,1).EntireRow.Insert    .Cells(1,1).EntireRow.Insert   '2行目の1列目に4行目の2列の文字を入れる。    .Cells(2,1)=.Cells(4,2) End With End Sub '======================================================================= Sub A3() 'ネットで探した5行ごとに空白行を入れるプログラムを利用して修正できないかと思ったのですが出来ませんでした。ネットで探したプログラムを記載します。(参考までに) Dim i As Long i=1 Do Until Cells (i*6)= "" Rows (i*6). Insert (xlDown) i=i+1 loop End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NG例: CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ↓ DDの続く2回目以降の5行ごとの空白1行が入らない うう CC       うう CC       うう ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ

関連するQ&A