• ベストアンサー

Excelマクロ 範囲指定について教えて下さい。

ソフトから書き出したテキスト形式のファイルを、エクセルで読み込んで範囲を指定し、 他のブックのシートに貼り付けるという、いつもの作業をマクロで簡素化しようと、 マクロ初心者の私は、マクロの自動記録と、インターネットで調べたりで作っているのですが、 範囲指定でつまづいています。 読込んだファイルには、A列からH列までデータがあります。 行のほうは、その都度変わります。 A列を下に見ていくと、途中<小計>という文字が何度か出てきます。 左上端がA4として、そこから初めての<小計>がある行の1段上の行までで 範囲指定させることは出来るのでしょうか? 例えば、A20に<小計>があるなら、指定範囲を A1:H19 という具合に するのはどうしたらいいですか? 下のマクロでは、H列の右下端まで全部範囲指定するので、ダメですね。 Dim 左上端 As String, 右下端 As String Windows("aaa.txt").Activate Worksheets("aaa").Select 左上端 = "A4" 右下端 = Range(左上端).SpecialCells(xlLastCell).Address Range(左上端 & ":" & 右下端).Select Selection.Copy Windows("bbb.xls").Activate Sheets("bbb").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Excel2003を使っています。 よろしくお願いします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

こんな感じでしょうか・・・。 Sub TEST() Dim 左上端 As Range, 右下端 As Range Windows("aaa.txt").Activate Worksheets("aaa").Select Set 左上端 = Range("A4") Set 右下端 = Columns("A:A").Find(What:="小計", After:=Range("A4"), LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows) Range(左上端, 右下端.Offset(-1, 7)).Copy Windows("bbb.xls").Activate Sheets("bbb").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub

maru_v66v
質問者

お礼

希望どうりの範囲選択が出来ました。 私が書いていたのと似ているようだけど、 全然別物ですね。すごいです。 なにがどーなっているのか、これも紐解き頑張ってみます。 どうもありがとうございました。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

最初の「<小計>」までを選択するならMATCH関数を利用する方が高速だと思いますが、繰り返し処理を行いそうな感じがしますのでFor文で書きました Sub Macro() Dim idx, StartR As Long  StartR = 1 '開始行を指定  For idx = StartR To Range("A65536").End(xlUp).Row   If InStr(Cells(idx, "A"), "<小計>") > 0 Then    Range(Cells(StartR, "A"), Cells(idx - 1, "A")).Select    StartR = idx + 1 '繰り返し処理のための予備的な行です    Exit For   End If  Next idx End Sub 全体をDo~Loop文で囲めば繰り返し「<小計>」までの行を選択できます。

maru_v66v
質問者

お礼

貼り付けてテストしてみたら、A列だけの選択でした。 H列までとなると、もっとコードが必要なのでしょう。 このマクロがどういう仕組みなのか、 頑張って紐解いて、今後の参考にします。 ありがとうございました。

関連するQ&A

  • Excel マクロ右下末端までの範囲指定

    Excel 2007を使っております。 VBAで、左上A1から、文字が入っている右下末端(都度行はかわる。L列であるというのは変わりませんが)までの範囲指定をして、印刷範囲に指定するには、どうすればよいのでしょうか。 以下、記録マクロでやっていて、仮に1000行だと、このような感じになっています。 Range("A1:L1000").Select Range("L1").Activate ActiveSheet.PageSetup.PrintArea = "$A$1:$L$1000"

  • 空白までのデータを範囲指定する

    EXCEL VBAにて教えてもらいたい事があります。 空白までの行列を範囲指定したいのです。         A  B   C   D  1   1123 123  12  57 2    32 1 5 52 3 2 98 852 11 4 65 2 72 1 A列からD列の行が空白になるまでの範囲を指定する マクロを教えてほしいです。 A列の最終行の次の行にカーソルを合わせるマクロはわかるのですが 範囲を指定する方法がわかりません。 よろしくお願いいたします。 最終行の次の行にカーソルを合わせるマクロ Range("A1").End(xlDown).Select ActiveCell.Offset(rowOffset:=1).Activate Selection.Copy

  • エクセル マクロ データがある範囲を判定

    エクセル2010を使っています。 以下の様なマクロでコピーペーストを行っています。 Sub ボタン5_Click() Range("DM1:DO78952").Select Selection.Copy Windows("book2.xlsm").Activate Range("A1").Select ActiveSheet.Paste Windows("book1.xlsm").Activate End Sub このマクロでは範囲が指定されていますが、実際のデータは行単位で増減しますので、これを DM~DO列のデータがある行を判定し、全て選択しコピーするにはどうすれば良いでしょうか? (増減は必ず行単位、DM列にデータがあれば、必ずDO列まで有ります。) 詳しい方、よろしくお願い致します。

  • Excelのマクロで範囲指定したい

    マクロで範囲指定したいのですがうまくできません。この表示はどこがおかしいのでしょうか? Range(("a" & (GyoNO - 1): Range("b"&(GgyoNo-1)).Select

  • エクセルで範囲指定の方法

    指定する列の範囲はAから始まり、X~Z位までです。行は決まっています。先ず次の文で列の範囲を取得します。 Range("A1").CurrentRegion.Select I = .Selection.Columns.Count 例えば5行目のI列を指定する時はどうすれば良いでしょうか。 Range("A5:" & I & "5").Select では、エラーになります。

  • Excelマクロ:変数でセル範囲指定

    マクロの迷い人です。 Excelの表をマクロで印刷しようと思っています。 行の数が毎回違うため、最終セルもその都度指定しなければなりません。 A1 B1 A2 B2 A3 B3 A4 B4 この例で、A5 B5 以降は空セルとします。 印刷範囲を Range("A1:B4")と書かずに、そのときどきのアクティブセルを変数に代入し、変数を使って範囲指定したいのです。 Sub MacroTest () Dim a As Variant Dim b As Variant Range("B1").Activate Do While a <> 0 ActiveCell.Offset(1, 0).Activate '空白でなければ一つ下に移る a = ActiveCell.Value Loop ActiveCell.Offset(-1, 0).Activate '上の行に移る b = ActiveCell.Value Range("A1:"& b).Select End Sub こうしてみましたがダメでした。 デバッグの方法がわからないので教えて下さい。よろしくお願いします。

  • エクセルVBAで範囲の指定をしたいです(初心者)

    エクセルVBAで範囲の指定をしたいです(初心者) 列AからJがデータが入る範囲です。 列AとBとCには必ず数値等が何かしら入ります。 列Dは常に空白です。 列E以降は何か入ることも入らないこともあります。 7行目までデータがある場合、 A1セルからこの場合はJ7セルまでを範囲指定したいのですが 行数は未定なので、 Range("A1").Select Range(Selection,Selection.End(xlDown)).Select でA列のデータ最終行まで下がり、そこから9つ右の列までを 範囲指定するというのがよくわかりません。 自動記録で絶対参照と相対参照を切り替えてやってみたのですが、 どうしても Range(Selection, Selection.End(xlDown)).Select ActiveCell.Range("A1:J7").Select と常にA1からJ7が指定になってしまいます。 バージョンは2003です。 つたない質問文で申し訳ありませんが、 どなたか宜しくお願いいたします。

  • Excel マクロ

    マクロで一部分だけ範囲選択をかけたいのですが、 A列から指定行までと1行目の最右列までを範囲選択をしたいのですができるのですか? 出来ましたら、コードを教えてください。 コードの記述は下のとおりです。 Range("A1").Select Range(Selection, Selection.End(xlDown)).Select a1 = Range("xfd1").End(xlToLeft).Select Endcolumn = Application.WorksheetFunction.Max(a1)

  • マクロ範囲指定について

    セル(E1・E2)に指定したい行を入力した値を活用したい。 Sheets("sheet1").Select 上 = renge("e1").xlRowLabels 左 = 1 下 = renge("e2").xlRowLabels 右 = 3 Range(Cells(上, 左), Cells(下, 右)).Select このマクロを実行すると次のエラーが出ます。 コンパイルエラー SubまたはFunctionが定義されません。 初歩的な事の様な気もしますが宜しくお願いします。

  • EXCELの範囲指定について

    大きな範囲を範囲指定しようと、左ドラッグでマウスを動かすと、必ず範囲指定したい箇所より大幅にオーバーしてしまいます。例えば、1行A列から、125行HG列まで範囲指定したい時、左ドラッグでマウスを動かすと、1000行以上、IM列くらいまでになってしまいます。何か良い方法はあるのですか?

専門家に質問してみよう