- ベストアンサー
エクセルVBA セル範囲の選択とループ処理
FEX2053の回答
- FEX2053
- ベストアンサー率37% (7988/21361)
VBAを書ける方のようなので、ざっとした発想から。 たぶんこれよりかっこよく書く方法はありますけど、VBAのコードは 「後で見てメンテナンス出来ない」と困りますから、コードが長くなっても 可能な限り「わかりやすい」ことが肝要だ、と私は思っているので。 で、ですね。まずは空欄を探す方法。要はIF文で""を見つければ いいんです。 Cells(開始行,1).Select Do Until Selection.Value="" Selection.Offset(1).select Loop 終了行=Selection.Row これで、開始行、終了行が得られます。あとは Range(Cells(開始行, 1), Cells(終了行, 13)).Select でコピー範囲が得られます。コピーが終われば 開始行=終了行+1 で、さっきのループを回せばオッケーです。
関連するQ&A
- excelで別シートのセルを選択(VBA)
どなたか教えてください。 シートXのB1に行番号 シートXのB2に列番号 が記載されていたとして、 別シート(Y)の、上記で指定したセルを選択する(フォーカスを移動する方法)を教えてください。 シート(X) A B C 1 行 25 2 列 2 シート(Y) A B C 1 2 ::::::: 24 25 (ここ) 以下のように書いても、最後の行でエラーになってしまいます。 行番号 = Sheets("X").Cells(1, 2).Value 列番号 = Sheets("X").Cells(2, 2).Value Sheets("Y").Select Range(Cells(行番号, 列番号)).Select
- ベストアンサー
- オフィス系ソフト
- エクセルVBAの貼付けについて
エクセルVBAの貼付けについて シートAとBがあって、シートBの1~7列をコピーし、シートAの最終行に貼り付ける方法を教えて下さい。 下記のように書いてみたのですがダメでした。 Sheets("B").Select Rows("1:7").Select Selection.Copy Sheets("A").Select With Range("A1").End(xlDown).Offset(1, 0) .ActiveSheet.Paste End With
- ベストアンサー
- その他(プログラミング・開発)
- 【エクセル VBA マクロ】
シートAの日付を確認してデータをコピーし、シートBの該当する日付の列に売り上げを貼り付けるというマクロを組みたいです。 他の方達のを参考にしながら作成しましたが、実行をすると「エラー1004」 Matcheプロパティが見つからないというエラーが出ます。 どなたか原因と対策を教えてください。 Sub() Sheets("シートA").Select Range("J3:J10000").Select ※売上データ Selection.Copy 検査値 = Range("R2").Value ※日付データ Sheets("シートB").Select Set 検索範囲 = Range("J4:AN4") ※日付データ 列 = Application.WorksheetFunction.Match(検査値, 検索範囲, 0) Cells("4, 9" + 列).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks:False, Transpose:=True End Sub
- 締切済み
- Visual Basic
- エクセルVBA での繰り返し処理について
エクセルVBA での繰り返し処理について 以下の作業を20回繰り返そうとしています(別シートから持ってきた値を「行列を入れ替えて」貼り付け) Sheets("初期設定").Select Range("A6:C6").Select Selection.Copy Sheets(TS).Select Range("B4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True 「初期設定」シートの方は1行ずつ並んでいるので、「2回目」の「2行目」は 「 Range("A7:C7").Select」になり、 「TS」シートの20行後に貼り付けたいので、「2回目」の「5行目」は 「Range("B24").Select」 になります これを、for ~ next を使い、以下のようにしてみましたが、上手くいきません。 For j = 6 To 26 For k = 4 To 384 Step 20 Sheets("初期設定").Select Range(Cells(j, 1), Cells(j, 3)).Select Selection.Copy Sheets(TS).Select Cells(k, 2).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Next k Next j 1分程度ループし続けた後、「初期設定」シートの最終行だけが貼り付けられてしまいました。 どこをどのように直せばいいのかお教えください。 よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- エクセルVBA:繰り返し処理について
エクセルVBA初心者です。どうかご指導お願いします。 シート1に入力されたデータベースがあります。 B列には氏名が入力されています。 B2の値で絞りこんで、シート2に貼り付け、 B3の値で絞りこんで、シート3に貼り付け、 B4の値で絞り込んでシート4に貼り付けてB列の値が""(空白)になるまで繰り返すコードの書き方を教えてください。 さらに、B列には、当然同じ氏名が何回も入力されているので、前に一度出た人はパスするというようにしたいのです。 下記コードは、「B2の値で絞りこんで、シート2に貼り付け」だけをしたものですが、このコードを応用して作りたいのです。ご指導お願いします。 Sub test01() With sheets("sheet1")Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub
- ベストアンサー
- オフィス系ソフト
- VBA 変数代入とループ処理について
エクセルにてループ処理をしたいと考えています。 sheet1には連番が振ってあるデータが格納してあります。 sheet2にはsheet1の連番をB1に入力すれば必要なデータだけが出るようにvlookupで表示されるようにしてあります。 sheet3にはフォーマットが作ってあり、sheet2で表示されたデータがsheet3の対応した場所にデータが入るように作ってあります。 sheet2のA1に5 A2に20と入力したら連番5から20までsheet3が印刷するVBAを組みたいです。 変数の代入が間違っていると思うのですが、何が間違っているのか わからないので、質問しました。 以下にためしで組んでみたものがありますので、ご教授お願いします。 Dim temp1 Dim temp2 Dim temp3 Sheets("sheet2").Select temp1 = Range(A1).Value temp2 = Range(A2).Value temp3 = temp2 - temp1 While temp3 Sheets("sheet2").Select Range(B1).Value = temp1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True temp1 + 1 Wend 初歩的なミスをしていると思うのですが、よろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセル VBA シートの選択
windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。
- ベストアンサー
- オフィス系ソフト
- Excel VBA 他のシートからセル範囲をコピー
宜しくお願いします。 Excel2003でVBAを利用しています。 他のブック内にある(sheet1)のセル範囲(B9:D64)の値を 現在開いているブック内の(sheet8)の指定した位置に貼り付けたいと 思っています。 コピーしたセルはB,C,Dと3列あるのですが、 B列を(sheet8)のB列に、C列を(sheet8)のF列に、 D列を(sheet8)のJ列のそれぞれ12行目を頭にして 貼り付ける、という作業をしたいのです。 上記のようなコピー作業が、列や行がばらばらで50箇所くらい あります。 マクロ記録で、2,3箇所試しにやってみたのですが、 1列づつ、クリップボードを経由して行わなければならず、 冗長なコードになってしまい、もっと良い方法があるのでは ないかと思い、書込みしました。 現在のコードです。 workbook(1).Activate 'コピー元のセルを選択してクリップボードへ Worksheets(sheet1).Range("B9:B64").Copy '1枚目 日付列 '現在のブックを選択して貼り付け ThisWorkbook.Activate Range("B12").Select '1枚目 日付列 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して値を貼り付け 上記のように、1列づつコピーしては貼り付けている状態です。 もっとスマートな方法がありましたら教えてください。 宜しくお願いします。
- ベストアンサー
- Visual Basic
- VBA、セルの選択範囲について
下記のような表を用意し、 A B C D E 1 1月 2月 3月 合計 2 Aさん 1 2 3 6 3 Bさん 1 2 3 6 4 Cさん 1 2 3 6 5 合 計 3 6 9 18 セルの範囲選択を指定し別シートの任意のセルへコピーをVBAで行いたいのですが、 Aさん、Bさん、Cさんという範囲を選択する為に、合計という文字は含みたくないので、 Range("A2").Select Range(Selection, Selection.End(xlDown).Offset(-1)).Select と記載し、これは出来ました。 同様に、 1月、2月、3月という範囲も同様にxlToRightを使用し選択出来ました。 Range("B1").Select Range(Selection.End(xlToRight).Offset(, -1), Selection).Select しかし、B2:D4の範囲の指定の仕方がわかりませんでした。 データのレコード数は一定ではないのでB2:D4というように範囲を指定する事は出来ません。 そのときに応じてDさん、Eさんと増えたり、4月、5月と増えたりするので。 何か方法があればご指導お願いします。
- ベストアンサー
- オフィス系ソフト
- VBA ループ処理 "型が違います"エラー
"sheet1"のA1:J1を"sheet2"のA1:J1にコピー "sheet1"のA2:J2を"sheet2"のA2:J2にコピー "sheet1"のA3:J3を"sheet2"のA3:J3にコピー これを"sheet1"A:Jが空欄になるまでループさせたいのですが、 どうしてもエラーが出てしまいます。。。 前回も同様の質問をして、回答を頂いたのですが、 自分なりに応用を利かせてやってみたら、エラーが出てしまいます>< ------------------------------------------------------------ Sub cpy2() Dim i As Long Dim Sht1 As Range Dim Sht2 As Range Set Sht1 = Sheets("Sheet1").Range("A1:J1") ←("A1")ではエラーは出ません。 Set Sht2 = Sheets("Sheet2").Range("A1:J1") ←("A1")ではエラーは出ません。 For i = 0 To 65535 If Sht1.Offset(i) <> "" Then ←ここでエラーが出ます"型が違います" Sht2.Offset(i) = Sht1.Offset(i) Else Exit For End If Next End Sub -------------------------------------------------------------- 教えて下さい。お願いします。
- ベストアンサー
- Visual Basic
お礼
ありがとうございます。 無事に解決することができました。 わかりやすい文字列をコード内で使うとたしかに、のちのち見やすいですね。 今後も、見直しをしながら、回答者さんのようなわかりやすいコードをかけるようになるよう、頑張ってまいります。