VBAで範囲指定について

このQ&Aのポイント
  • VBAでシートAの範囲A1:B200までをコピーしてシートBの範囲A1:B200にコピペする方法について相談です。
  • 範囲のB200のみ変動する可能性があるため、変動に対応する方法を知りたいです。
  • C1に行数を指定して対応する方法があるかどうか、VBAの詳しい知識がないため教えていただきたいです。
回答を見る
  • ベストアンサー

VBA 範囲指定について

VBAでシートAの範囲A1:B200までをコピーして シートBの範囲A1:B200にコピペしたいのですが、 範囲のB200のみ変動する可能性があるので、その変動に対応出来るようにしたいです。 例) Worksheets("A").Activate PD = Worksheets("入院費用一覧").Range("A1:B〇〇〇").Value Windows("B").Activate Worksheets("B").Range("A1:B〇〇〇").Value = PD B〇〇〇の所に変動できる数値を関数でC1に行数指定して対応できないかと考えていますが、何かいい方法有りますでしょうか。 宜しくお願い致します。 ※VBAあまり詳しくはありません。

  • bawbe
  • お礼率4% (3/67)

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

>B〇〇〇の所に変動できる数値を関数でC1に行数指定 との事ですが、そのC1とは、どのシートのC1セルの事なのでしょうか?  入院費用一覧シートのC1セルの事なのでしょうか? それともAシートのC1セルの事なのでしょうか? それともBシートのC1セルの事なのでしょうか?  取り敢えず、AシートのC1セルに「B〇〇〇の所に変動できる数値」の値が存在している場合に対応するVBAを御伝えしておきますので、もしシートが違っている場合には指定するシートを適時変更して下さい。 Dim myRange As Range, buf As Variant buf = Worksheets("A").Range("C1").Value If Not(buf > 1 and buf <= Rows.Count) Then buf= 0.5 If buf > Int(buf) Then Msgbox "C1セルlに行数が指定するための値が入力されておりません>" _ & vbCrLf & "マクロを終了いたします。" & vbExclamation, "行数未設定" Exit Sub End If Set myRange = Worksheets("入院費用一覧").Range("A1:B" & buf) Worksheets("B").Range("A1") _ .Resize(myRange.Rows.Count_,myRange.Columns.Count).Value _ = myRange.Value Worksheets("B").Activate

その他の回答 (2)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは ひょとして、セルC1で数値で指定しなくても、最終行を判定するだけ良いなら、 Sub test()   Dim t As String   With Worksheets("入院費用一覧")     t = .Range("A1", .Range("B" & Rows.Count).End(xlUp)).Address     Worksheets("B").Range(t).Value = .Range(t).Value   End With End Sub とかでも。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

sub macro1()  dim LastRow as long  lastrow = worksheets("不明の").range("C1").value  worksheets("B").range("A1:B" & lastrow).value = worksheets("A").range("A1:B" & lastrow).value end sub みたいにします。

関連するQ&A

  • EXCEL 名前の定義 VBA参照の方法

    EXCELの名前の定義を、VBAから参照する方法を教えていただきたいのですが  名前を定義する    シートA  名前:TEST 範囲:シートA    シートB  名前:TEST 範囲:シートB    シートC  名前:Pass 範囲:ブック  それぞれをVBAから参照する場合    Range("TEST").Value: シートA内のVBA    Range("Pass").Value  では、参照できず。    Worksheets("シートA").Range("TEST").Value    Worksheets("シートC").Range("Pass").Value  にて、参照できました。 明示的なシート名入力が必要なのでしょうか? よろしくお願いいたします。

  • Excel VBA 定数にオブジェクトを指定したい

    Excel VBA 定数にオブジェクトを指定したい いつもお世話になりますm(__)m Excel VBAで、定数としてオブジェクトの指定はできないのでしょうか? 例えば、WorkSheets("Sheet1")を定数「Srt1」として設定したいのですが、  Public Const Srt1 As Object = Worksheets("Sheet1") としても「定数のデータ型が不正です」とエラーがでます。 例えば、セルに値をセットする時に Worksheets("Sheet1").Range("A1").Value="あああ" Worksheets("Sheet1").Range("A2").Value="いいい" Worksheets("Sheet1").Range("A3").Value="ううう" と書きますが、これを Srt1.Range("A1").Value="あああ" Srt1.Range("A2").Value="いいい" Srt1.Range("A3").Value="ううう" と書ければプログラムも見やすく、書きやすくなると思いました。 プログラムの最初に Dim Srt1 As Object Set Srt1 = Worksheets("Sheet1") とすれば使えるのですが、複数のシート名をまずは定数として登録したいと思っていますが、オブジェクト(ワークシート名)は定数として登録することは出来ないのでしょうか? お詳しいかた、是非ともご教授お願い致しますm(__)m

  • VBA Withの使い方

    2つのシートを操作するマクロを書いています。 Worksheets(A).Range("A1").Value = Worksheets(B).Range("A1").Value Worksheets(A).Range("B1").Value = Worksheets(B).Range("B1").Value Worksheets(A).Range("C1").Value = Worksheets(B).Range("C1").Value ・ ・ ・ 簡単に書くとこのような感じです。 =の両辺ともうまくWithでまとめてすっきりさせることは可能ですか?

  • エクセルのフォームのVBAについて

    VBAがまったくわからないのに参考書を見て高度な事に挑戦しています フォームは作れてフォームをクリックやら入力やらして作ったOKボタンを押すと シート2のA1B1C1‥の列に入力文字だけが羅列されます。 しかし次にやろうとするとA2B2C2‥と下に行かず又A1B1C1‥の列の文字が変更になり続きません。何がいけないのでしょうか? Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row .Range("A" & LastRow).Value = Worksheets("sheet1").Range("A5").Value .Range("B" & LastRow).Value = Worksheets("sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("A10").Value End With End Sub と参考書とおりいれたのですが‥。教えて下さい。

  • VBAについて

    こんばんは、下記のVBAについて質問をさせてください…! シートの名前と特定の列の名前が一致したらデータを引っ張ってくるというVBAなのですが、下記のVBAではもってくるデータはE列でおわりですが、もっと沢山列がある場合で、例えばDA列とかまである場合はどうすればよいのでしょうか…?! まさか「.Range("A" & cellCnt).~」というのを一つ一つ入力するわけではないと思うのですが、記述の方法が分からず困っています。 どなたかご教示いただけると大変助かります…! ' データをとってくるシートの行 Dim dataCnt As Integer ' 貼り付け先のシートの行 Dim cellCnt As Integer cellCnt = 1 For dataCnt = 1 To Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row If Sheets("Sheet1").Range("L" & dataCnt).Value = Sheets(sheetIdx).Name Then With Worksheets(sheetIdx) .Range("A" & cellCnt).Value = Worksheets("Sheet1").Range("A" & dataCnt).Value .Range("B" & cellCnt).Value = Worksheets("Sheet1").Range("B" & dataCnt).Value .Range("C" & cellCnt).Value = Worksheets("Sheet1").Range("C" & dataCnt).Value .Range("D" & cellCnt).Value = Worksheets("Sheet1").Range("D" & dataCnt).Value .Range("E" & cellCnt).Value = Worksheets("Sheet1").Range("E" & dataCnt).Value End With cellCnt = cellCnt + 1 End If Next

  • VBA AutoFilter 範囲指定

    いつもお世話になっております 過去に https://okwave.jp/qa/q9707059.html にてワークシートのデータをオートフィルターをかけて別なワークシートにデータを取り出す方法を教えて頂きました 送られてくる元データが変更になって、A3セルの上のA2セルの上にテキスト文字が入るようになったので、範囲指定を正しく出来るようにする方法を https://okwave.jp/qa/q9708868.html にて教えて頂きました 今回、https://okwave.jp/qa/q9707059.htmlで教えて頂いたワークシートのコードを実行させると元データが変更になったデータを利用すると、A1セルまで含まれた範囲がAutoFilter の領域と判断される為正しい結果となりません 添付画像のワークシートで Sub test9() Worksheets("Sheet1").Range(Cells(3, "A"), Cells(Range("A3").CurrentRegion.Rows.Count, Range("A3").CurrentRegion.Columns.Count)) _ .AutoFilter Field:=2, Criteria1:=Cells(5, "G").Value End Sub を実行させれば、"秋田”でフィルターがきちんとかけれらた状態になります そこで教えて頂いたコードを下記に変更して実行させてみたのですが Dim i As Long With Worksheets("Sheet1") .Range("B4", .Range("B4").End(xlDown)).Copy .Range("G4").PasteSpecial (xlPasteAll) .Range("G4", .Range("G4").End(xlDown)).RemoveDuplicates Columns:=Array(1), Header:=xlNo For i = 4 To .Cells(Rows.Count, "G").End(xlUp).Row Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = .Cells(i, "G").Value .Range(Cells(3, "A"), Cells(Range("A3").CurrentRegion.Rows.Count, Range("A3").CurrentRegion.Columns.Count)) _ .AutoFilter Field:=2, Criteria1:=.Cells(i, "G").Value .Cells(3, 1).CurrentRegion.Copy Destination:=Worksheets(.Cells(i, "G").Value).Cells(3, 1) .AutoFilterMode = False Next .Range(Cells(3, "A"), Cells(Range("A3").CurrentRegion.Rows.Count, Range("A3").CurrentRegion.Columns.Count)) _ .AutoFilter Field:=2, Criteria1:=.Cells(i, "G").Value 部分で 実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです になってしまいます 元データがA2セルにテキスト文字が入った状態でも正常にコード動作させるにはどのようにしたらいいのでしょうか よろしくお願い致します

  • ”インデックスが有効範囲にありません”と言われます

    はじめまして。 VBA初心者です。 次のプログラムを実行すると、 ”インデックスが有効範囲にありません”と言われます。 見よう見まねで本を参考に式を書いてみました。 1.csv のシート名”1”→ 2.csvのシート名"2"→…→100.csvのシート名”100”と順にファイルを読込みませて、 1つのシートに上から、1.csvのシート”1”の結果、2.csvのシート名の”2”の結果、と順に100行まで書き込みたいと考えているのですが上記のエラーになってしまいました。 今のままだと1行目、2行目に1.csvの結果が表示されるだけです。 エラーの原因がわからなくなってしまいました… すみませんが、よろしくお願いします。 以下、VBAです。 Option Explicit Sub test() Dim fileNames As Variant Dim a(12) As Long Dim lp As Integer fileNames = Application.GetOpenFilename(MultiSelect:=True) If IsArray(fileNames) = True Then For lp = 1 To UBound(fileNames) Workbooks.Open (fileNames(lp)) ThisWorkbook.Worksheets("Sheet1").Range("B2", "B" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF5").Value ThisWorkbook.Worksheets("Sheet1").Range("C2", "C" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF6").Value ThisWorkbook.Worksheets("Sheet1").Range("D2", "D" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF7").Value ThisWorkbook.Worksheets("Sheet1").Range("E2", "E" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF8").Value ThisWorkbook.Worksheets("Sheet1").Range("F2", "F" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF9").Value ThisWorkbook.Worksheets("Sheet1").Range("G2", "G" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF10").Value ThisWorkbook.Worksheets("Sheet1").Range("H2", "H" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF11").Value ThisWorkbook.Worksheets("Sheet1").Range("I2", "I" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF12").Value ThisWorkbook.Worksheets("Sheet1").Range("J2", "J" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF13").Value ThisWorkbook.Worksheets("Sheet1").Range("K2", "K" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF14").Value ThisWorkbook.Worksheets("Sheet1").Range("L2", "L" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF15").Value ThisWorkbook.Worksheets("Sheet1").Range("M2", "M" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF16").Value a(1) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF5").Value a(2) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF6").Value a(3) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF7").Value a(4) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF8").Value a(5) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF9").Value a(6) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF10").Value a(7) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF11").Value a(8) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF12").Value a(9) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF13").Value a(10) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF14").Value a(11) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF15").Value a(12) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF16").Value ThisWorkbook.Worksheets("Sheet1").Range("N2", "N" & lp).Value _ = (a(1) + a(2) + a(3) + a(4) + a(5) + a(6) + a(7) + a(8) + a(9) + a(10) + a(11) + a(12)) / 12 ThisWorkbook.Worksheets("Sheet1").Range("O2", "O" & lp).Value _ = WorksheetFunction.Max(a(1), a(2), a(3), a(4), a(5), a(6), a(7), a(8), a(9), a(10), a(11), a(12)) ActiveWorkbook.Close a(1) = 0 a(2) = 0 a(3) = 0 a(4) = 0 a(5) = 0 a(6) = 0 a(7) = 0 a(8) = 0 a(9) = 0 a(10) = 0 a(11) = 0 a(12) = 0 Next End If End Sub

  • VBAについて

    いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1  ↓セルA1 ↓セルB1  5月26日   26           B1のセルはDAY(A1)にて出してます         完売  A氏     ○             Sheet2  ↓A列   ↓B列 5月  1日  ・  ・  ・  26日    ○           ←シート1の所に○が付いているとシート1セルB1と同じ  27日                  日付の隣のセルに○を入力  28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。

  • 〖緊急〗エクセルのVBAについて質問です。

    エクセルのVBAを使用して、下記の動作を実行したいのですがうまくいきません。 おしえてください。 sheet1に移動したいシート名の一覧を作成し、一覧を参照してシートを移動したいです。 RangeにカーソルをあてるとA1に入力したシート名前が反映しているようなのですが・・・。 sheet1のセルA1に移動させたいシート名を入力しています。 Sub Worksheet() Worksheets(Range("A1")).Activate End Sub ※❝インデックスが有効範囲にありません❞とエラーがでます。 ※同一のBOOK内での作業です。 よろしくおねがいします。

  • エクセルVBA の変数を使うべきでしょうか?

    はじめまして。エクセル初心者です。 書籍やサイトで勉強させてもらっていますが、VBAがなかなか難しくてすぐに壁にぶつかってしまいます。少々困ってしまい、詳しい方のアドバイスを頂ければと質問を投稿させていただきました。 どうか宜しくお願い致します。質問ですが、 以下のようなコードで、sheet5のB列の任意のセルをダブルクリックした場合、sheet5のBCD列の同じ行のセル値がsheet1の指定した列に入力されるという処理を作りました。 これで一応目的の動作はするのですが、数が増えると「コンパイルエラー・プロシージャが大きすぎます」というメッセージがでてしまいます。列や行には規則性があるので、もしかしたら変数というものを使ってコードを書き直せばいいのかなと思いネットで調べてみたのですが、今のところさっぱり理解できません。 申し訳ありませんが、分かりやすくご教授いただけないでしょうか。バージョンは2003を使っています。 また、下のコードですと、sheet5のBCDいずれかのセルに空白があった場合、sheet1の列に入力されるときに入力される行がずれてしまいます。今は空白を何かで埋めて対処しているのですが、この問題の解決策も教えて頂けると助かります。どうか宜しくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Target.Address = "$B$2" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B2") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C2") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D2") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$3" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B3") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C3") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D3") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$4" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B4") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C4") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D4") Worksheets("sheet1").Activate cancel = True End If   ・     ・   ・     ・   ・     ・ End Sub

専門家に質問してみよう