
No.1ベストアンサー
- 回答日時:
こんにちは
>VBA全くの初心者です
自身で組み込み出来ますか・・・
>数百あるため
数百に対応する為の処理は出来ますか・・
シートのコピーして行うのでしょうか?
取り合えず 示されている表組を対象に
(B・D・F列)の各セルの値が”0”の場合
削除して上方に詰めるコードです
データを操作して書き直すのではない方法ですので元データのシート自体変更されてしまいます コピーシートなどで試してください
元データを残したい場合は別法になります
Sub sample()
Dim col As Variant
Dim i As Long
Dim DelRng As Range
For Each col In Array("B", "D", "F")
For i = 4 To Cells(Rows.Count, col).End(xlUp).Row
If Cells(i, col) = "0" Then
If DelRng Is Nothing Then
Set DelRng = Cells(i, col).Offset(, -1).Resize(, 2)
Else
Set DelRng = Union(DelRng, Cells(i, col).Offset(, -1).Resize(, 2))
End If
End If
Next
If Not DelRng Is Nothing Then
DelRng.Delete Shift:=xlUp
Set DelRng = Nothing
End If
Next
End Sub
No.3
- 回答日時:
サンプルは汎用性の低いコードになっています
Array("B", "D", "F")の部分にArray("B", "D", "F", "H", "J"・・・)と加えるか
必ず2列(対象は1列飛ばし)であるなら
For Each col In Array("B", "D", "F") を 下記に一行書き直します
For col = 2 To Cells(4, Columns.Count).End(xlToLeft).Column Step 2
4行目が最終列を取得する対象行です
2列目から1つ飛ばしに 2・4・6・8・10・・・・列が "0"検証列になります
No.2
- 回答日時:
こんにちは
>VBA全くの初心者です。
VBAに固執しているのでなければ、関数でも可能ですよ。
スピルが使える 365 あるいは 2021 環境であるなら、簡単で、
ご提示のレイアウトで、H4セルに
=FILTER(A4:A999,OFFSET($A4:$A999,0,INT(COLUMN(B1)/2))<>0,"")
を入力して、H4:M4にフィルコピーすれば、下方にスピルされ、ご提示の結果が得られます。
※ 式中の「999」は最大行範囲としていますので、適当に修正してください。
※ スピルが使えない環境でも関数で可能ですが、少し面倒な数式になります。
どうしてもVBAで行いたい場合は、以下一例です。
Sub Q_13435857()
Dim v, v2()
Dim i As Long, j As Long
Dim k As Long, m As Long
For i = 1 To 5 Step 2
m = Application.Max(Cells(Rows.Count, i).End(xlUp).Row, 4) - 3
v = Cells(4, i).Resize(m, 2).Value
ReDim v2(1 To m, 1 To 2)
k = 1
For j = 1 To m
If v(j, 2) <> 0 Then
v2(k, 1) = v(j, 1)
v2(k, 2) = v(j, 2)
k = k + 1
End If
Next j
Cells(4, i + 7).Resize(m, 2).Value = v2
Next i
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Excel(エクセル) 条件付き書式の色付きセルのカウント方法について 2 2022/10/21 14:51
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
DataGridViewに空白がある場合...
-
Worksheets メソッドは失敗しま...
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
vba 2つの条件が一致したら...
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
実力がなくマクロがわかりません。
-
VBAでのリスト不一致抽出について
-
【VBA】2つのシートの値を比較...
-
文字列の結合を空白行まで実行
-
複数csvを横に追加していくマク...
-
エクセルでフォームのチェック...
-
エラーコード1004
-
データグリッドビューの一番最...
-
VBAの構文 3列置きにコピーし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
IIF関数の使い方
-
Changeイベントでの複数セルの...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
VBAのFind関数で結合セルを検索...
-
DataGridViewに空白がある場合...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
VBAでのリスト不一致抽出について
-
エクセル 2つの表の並べ替え
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBA 列が空白なら別のマクロへ...
おすすめ情報
Qchan1962さん、こんにちは。
試したところ一瞬でできたので目を疑いました。
ありがとうございます。
数百あるというのは、シートを増やすのではなく、一つのシートで横に続けています。
サンプルは3列でしたがMAX列までできれば助かります。
お手数ですがよろしくお願いします。