VBA初心者です。おしえてください。
受注一覧より顧客別一覧に転記するようにしたいのですが、
セルが空欄になるまで同じ作業を繰り返したいときはどのようなプログラムに
したらよろしいでしょうか。
いまはForを使用しています。数値は任意で入力したものです。
Sub 顧客別一覧()
Worksheets(2).Range("B2").Value = Worksheets(1).Range("B2").Value
rw = 5
Worksheets(2).Range("A5:F248").ClearContents
For cnt = 4 To 248
If Worksheets(1).Range("B" & cnt).Value = Worksheets(1).Range("B2").Value Then
Worksheets(2).Range("A" & rw).Value = Worksheets(1).Range("A" & cnt).Value
Worksheets(2).Range("B" & rw).Value = Worksheets(1).Range("C" & cnt).Value
Worksheets(2).Range("C" & rw).Value = Worksheets(1).Range("D" & cnt).Value
Worksheets(2).Range("D" & rw).Value = Worksheets(1).Range("E" & cnt).Value
Worksheets(2).Range("E" & rw).Value = Worksheets(1).Range("F" & cnt).Value
Worksheets(2).Range("F" & rw).Value = Worksheets(1).Range("G" & cnt).Value
rw = rw + 1
End If
Next
End Sub
シート2が顧客別で、シート1が受注一覧です。
宜しくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>セルが空欄になるまで同じ作業
#1さんの書いていたとおりで、Endプロパティでデータの最後の行を決めるのが一番良いと思います。空白が出るまで待つ方法(Do~Loop)は、表のような行数で処理できる場所は、若干の無駄な部分が出てきます。
また、ループしている中のまたループを設けてしまいました。無駄が減るからです。
それと、コード全体をみなおすと、フィルターを掛けて貼り付けたらどうかなって思います。
'//
Sub 顧客別一覧R()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim rw As Long, cnt As Long
Dim i As Long, j As Long
Dim Lastrow As Long
Set sh1 = Worksheets(1)
Set sh2 = Worksheets(2)
Lastrow = sh1.Cells(Rows.Count, 1).End(xlUp).Row
sh2.Range("B2").Value = sh1.Range("B2").Value
rw = 5
sh2.Range("A5:F" & Lastrow).ClearContents
With sh2
For cnt = 4 To Lastrow
If sh1.Range("B" & cnt).Value = sh1.Range("B2").Value Then
j = 1
For i = 1 To 7
If i = 2 Then j = j + 1
.Cells(rw, i).Value = sh1.Cells(cnt, j).Value
j = j + 1
Next
rw = rw + 1
End If
Next
End With
End Sub
No.1
- 回答日時:
こんにちは
VBAから範囲を調べるのに、キー操作のEND+矢印キーに相当する処理を利用することが多いです。
例えば、シート1のA4から連続して値のある最終行(次の行がが空白)を求めたいのであれば、
Worksheets(1).Range("A4").End(xlDown).Row
といった感じです。(キー操作と同じです)
注)セルに式が入っていて計算結果が空白の場合は、値があるものと見なされます。
よく用いられるのは、途中に空白行があっても、最終的に値がある最下行を求めたい場合などで
Cells(Rows.Count, 1).End(xlUp).Row
のように、シート上の最下セルからEND+↑で得られるセルを求めたりしますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルが空白だったら、そ...
-
ExcelVBAを使って、値...
-
VBAでセルをクリックする回...
-
VBからEXCELのセルの値を取得す...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
【Excel】指定したセルの名前で...
-
Sub 要具ライフ() ActiveSheet....
-
任意フォルダから画像をすべて...
-
i=cells(Rows.Count, 1)とi=cel...
-
【VBA】飛び飛びの3セルに"完了...
-
Excel VBAで比較して数値があっ...
-
Excel VBA、 別ブックの最終行...
-
【Excel VBA】指定行以降をクリ...
-
TODAY()で設定したセルの日付...
-
エクセル(Excel) ワイルドカー...
-
EXCELで変数をペーストしたい
-
エクセルVBAで、シート上で結合...
-
ExcelのVBAで数字と文字列をマ...
-
VBAの計算で@が出てしまう件
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報