• 締切済み

変数?

昨日から仕事上の都合でマクロを組んでますが エクセルVBAを使ったのも昨日が初めてです。。(T_T) 質問をしたいのは シートの横1列で1レコードとして それが300レコードほどあります。 そしてそのレコードを印刷用のテンプレートに 項目を飛ばすというマクロは出来たのですが テンプレに飛ばしたいレコードの指定をする為に 選択フォームを作りました。 そのフォームに設けたのは「No.」項目と 「印刷画面へ」と「閉じる」ボタンがあります 「No.」欄に番号を入れて「印刷画面へ」を押すと 指定したレコードを印刷テンプレに・・ を行いたいのですが、 現在下記のように書いてます If textbox1 = 1 Then  ・・・(1) windows("データ元ファイル.xls").Activate Range("C4:R4").Select ・・・(2)  Selection.Copy Windows("印刷テンプレート.xls").Activate Range("M1").Select ActiveSheet.Paste End If これだと約300近くのレコードに対して コマンドを書かないとダメですよね? そこで(1)のTextbox1の値によって (2)にある("C4:R4")の値が変化するようにしたいのです が、色々調べましたがわかりません。 記述は間違ってると思いますが。 下記のような事をしたいので解る方はすいませんが 教えていただけないでしょうか・・? Textbox1 = x Range("Cx:Rx").Select Selection.Copy

みんなの回答

回答No.3

No1.の方がおっしゃる通り、 Cells()を使用するのが良いと思います。 分かりやすくて。 > Textbox1 = x > Range("Cx:Rx").Select > Selection.Copy は、 Textbox1 = x Cells(x,x).Copy となります。 蛇足。 同じような事をしている知り合いがいて、指定したレコードを連続して印刷するってマクロを先日作ってあげました。 その人は、レコードが登録されてるBOOKと印刷用シートが同じBOOKで、印刷用シートにデータを飛ばすにはマクロを使わずVLOOKUPという関数を使ってました。 それだと印刷用シートのあるセルに行の番号をセットするだけなのでとても簡単なマクロになりましたよ。 EXCEL関数の方がお得意でしたら、そちらもご検討されてはいかがかと思いました。

回答No.2

Wizard_Zeroと申します。 まずは答えから。 x = Textbox1 Range("C" & x & ":R" & x).Select Selection.Copy という具合です。 x = Textbox1 変数「x」にTextbox1の値を代入。代入式では、変数を左辺、代入する値を右辺に置きます。 Range("C" & x & ":R" & x).Select 変数を文字列として出力する場合、クォートの中に埋め込むことは出来ないので、一度クォートを閉じ、「&」でつなげます。 ところで・・・、最初のコードだとTextbox1が1のとき、Rangeで「C4:R4」を指定していますが、2のときは「C4:R5」になるんですよね? となると、 Range("C4:R" & x + 3).Select が正解のような気がします。それに、Textbox1に数値以外の文字が書かれた場合の対処とかも必要ですよ。 変数の使い方が分からなければ、とりあえず簡単なプログラムで練習してみたほうが良いと思います。

回答No.1

Rangeでは、範囲指定が変数で出来ませんよね。 Cells()を使うと変数で、範囲が指定出来ます。 列と行の順番が逆だったと思いますが・・・ 行単位でのコピーなら、 Rowsを使う手があります。 例示をしない回答ですみません。 調べてみて下さい。

関連するQ&A

  • Excel マクロでファイル名を変数に・・・

    初心者です。検索してもわからなかったので質問です。 下記のようなマクロの処理で「AAA」というファイル名のExcelに「2.xls」からデータをコピーし貼り付けています。    ・    ・ Windows("AAA.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("AAA.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy    ・    ・ 今回は「2.xls」ではなく「3.xls」、「4.xls」、・・・といったように違うファイル名で同じ処理を行ないたいので「2」と指定するのではなく「(ファイル名).xls」といった形にしたいのですが、それは可能なのでしょうか。 ご意見宜しくお願いいたします。

  • Excel マクロ : マクロの記録の表記方法の変更

    Excelで質問です。 下記のようなマクロの記録を使用し「顧客一覧」のブックにデータを追加しています。 しかし、処理の中で一項目コピーするごとにファイルを行ったり来たりしているようで処理が遅いようです。何か解決策はあるのでしょうか? ・ ・ ・ Windows("顧客一覧.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("顧客一覧.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy Windows("顧客一覧.xls").Activate Range("B4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C8").Select Application.CutCopyMode = False Selection.Copy   ・   ・

  • EXCLの自動マクロ記録を簡潔に編集をお願いします。

    すみません教えてください。  収支会計.XLSの売上台帳のシートを別ファイル確定申告2.xlsの売上作業範囲シートに貼り付けたく自動マクロを記録したのですが、いまいち動きがぎこちなく重く何とかスムーズに出来ないでしょうか? Sub 売り上げ書き込み() ' ' 売り上げ書き込み Macro ' Range("A2:F251").Select Selection.Delete Shift:=xlUp Application.Left = 20.8 Application.Top = 34 Windows("収支会計.XLS").Activate With ActiveWindow .Top = 3.4 .Left = 9.4 End With Sheets("売上台帳").Select ActiveWindow.SmallScroll Down:=-55 ActiveWindow.ScrollRow = 1 With ActiveWindow .Top = 87.4 .Left = 37 End With Range("D5:H1004").Select Selection.Copy Windows("確定申告2.xls").Activate Range("B2").Select ActiveSheet.Paste Range("A2").Select Windows("収支会計.XLS").Activate Range("C5:C430").Select Application.CutCopyMode = False Selection.Copy Windows("確定申告2.xls").Activate ActiveSheet.Paste Range("H8").Select End Sub 宜しくお願いします。

  • オートフィルタをし選択・貼付をマクロにしたいのですが、対象データ表示される行が毎回違うのでうまくいきません。

    いつもお世話になっております。 どなたかご教示いただければ助かります。 ファイル(1)のデータの中からA行が830となっているものを、ファイル(2)のページ1の一番下の行に付け足し 同じようにファイル(1)からA行が1000となっているものを、ファイル(2)のページ2の一番下に付け足す という作業をマクロでしたいのですが、毎回830と1000がセルAの何行目に表示されるのかが異なっており、オートフィルタをかけた状態でマクロにするとマクロ作成時にたまたま表示されていた行数が指定されているので、別の日に違う行数をコピーしてしまい私が作成したマクロではうまくいきません。 どう変更すれば宜しいでしょうか? どうぞ宜しくお願い致します。 Workbooks.Open Filename:="mm.xls"    ←上記文でファイル(1) Sheets(DM).Select Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="<>*850*", Operator:=xlAnd, _ Criteria2:="<>*1000*" Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.EntireRow.Delete ActiveSheet.Rows("1:1").Select Selection.AutoFilter Windows("xx.xls").Activate  ←ファイル(2) Sheets("ll").Select   ←ページ1  ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Windows("mm.xls").Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="1000" Rows("3:3").Select Selection.Copy Windows("xx.xls").Activate ActiveSheet.Paste Application.CutCopyMode = False Windows("xx.xls").Activate Sheets("pp").Select  ←ページ2 ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Windows("mm.xls").Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="850" Rows("2:2").Select Selection.Copy Windows("xx.xls").Activate ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save Windows("mm.xls").Activate ActiveWindow.Close End Sub

  • エクセルで複数ファイルからコピーをする。

    すみませんが、BOOK1に複数のファイルから部分的にコピーして貼り付けるという作業をしたいのですが、ど素人なもんでわかりません。マクロで記録したモノをいじってみてるのですが、根本的にコードが分かっていなくギブアップです。  やりたいことは、フォルダーの中の970305日報1、970305日報2、970306日報1、970306日報2のようなファイルが山ほどあるのですが、 この970305の日報1と2を開き、それぞれファイルの決まった列を順番にをBook1の行へ行列を入れ替えて貼りつけていき(1日が1行)保存して閉じてから、次の日970306のデータをBOOK1の2行目に貼り付けるということをしたいのですが、どなたか教えていただければ助かります。よろしくお願いします。 Sub Macro2() Dim MyFile As String, MyPath As String Dim wb As Workbook, tb As Workbook Set tb = ThisWorkbook MyPath = tb.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While MyFile <> "" If MyFile <> tb.Name Then Set wb = Workbooks.Open(MyPath & MyFile) With ActiveSheet Windows("970305日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll,         Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H1").Select Selection.PasteSpecial Paste:=xlPasteAll,       Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報1.xls").Activate ActiveWindow.Close Windows("970305日報2.xls").Activate Range("B31:B36").Select Selection.Copy Windows("日報リスト.xls").Activate Range("N1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報2.xls").Activate Range("D31:D36").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("T1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報2.xls").Activate ActiveWindow.Close Windows("970306日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970306日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970306日報1.xls").Activate ActiveWindow.Close -----------------------------------------

  • マクロを使ったコピペがうまく動作しない。

    あるデータを転記用のブック(月毎にシートが分かれています。シートの内容は同一)に貼り付ける処理を行うため、下記のようなマクロを組んだのですが、何故か貼りつきません。処理終了時には、転記元ブック(シート)で最終処理の範囲(5番目のB287)を選択しています。一体何がいけないのでしょうか? データはA1からPまでで毎月可変しています。 また、転記用ブックが12枚あるため、月を指定してから貼り付けたいのですが、どのようにすればよいでしょうか?(下記は直接シ-トを指定しました) Sub test() Dim 最終行 As Integer '-------------------------------------------- 開始 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("1").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B1").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 1 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("2").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B83").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 2 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("3").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B157").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 3 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("4").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B227").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 4 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("5").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B287").PasteSpecial Paste:=xlPasteValues --------------------------------------------- 5 End Sub 

  • マクロを使って不特定のファイルからコピー&ペーストしたい(エクセル)

    エクセルのデータの必要な列を別のブックに入っているフォーマットにどんどん追加していけるようなマクロを作りたいと思っています。 マクロの自動記録を使ってみたのですが、特定のファイル名が入っているので、使えません。 中を見てみると Windows("A.xls").Activate Columns("b:b").select Selection.copy workbooks.open Filename:="B.xls" Windows("B.xls").Activate Range("D9").select Windows("A.xls").Activate Application.CutCopyMode = False Range("b:b").select Selection.copy Windows("B.xls").Activate Selection.Pastespecial Paste:=xlValues,Operation:=xlNone,SkipBlanks:=False,Transpose:=False . . . となっています。 このファイルAとなっている部分を、どのファイルでも実行できるようにしたいです。 後、ファイルBに貼り付けるときに一番最終行に追加していくにはどのような構文を足せばいいか教えていただきたいです。 初心者で質問の意図が伝わりにくかったらすみません.. よろしくお願いします。

  • ブック名を変数にしたらアクティブになりません。

    色々と調べたり試したのですが、どうしても判らないので質問させてください。 Excel2002でマクロを組んでいます。 セル上の数値を使って、ブック名を変数に格納しました。 したい事は、「DataBase.xls」のCalendarシートの内容を 「07年6月売上.xls」のとあるシートに値貼り付け です。 格納した変数 Dim Uriage As String Uriage = Worksheets("設定").Range("A4") & "年" & Worksheets("設定").Range("B5") & "月売上.xls " 上記のブックを開き、マクロを記述したブックに戻り、 再度上記のブックをアクティブにしようとすると 「有効範囲にありません」とメッセージが出ます。 デバッグ状態で記述を見てみると 1 Windows("DataBase.xls").Activate (←マクロ記述のブック名) 2 Sheets("Calendar").Select 3 Range("B7:H7").Select 4 Selection.Copy 5 Windows(Uriage).Activate (←変数格納したブック名) 5番でとまっています。 ですが、オンマウスにするとちゃんと「"07年6月売上.xls"」と表示が出ます。 それ以前に、ファイルを開くことは出来てるのに・・・・ いったいどういう事なのか、どうかご教示ください。 宜しくお願いします。

  • excel2003マクロの2007での使い方

    OS:windowsXP excel2003で作成したマクロがexcel2007で動かなく困っております。 マクロでやりたいことは 1つ目のブック(以降A)の内容を、2つ目(以降B)のブックに行列を反転しコピー です。Aのブックの列数は不変ですが行数、ファイル名は毎回変化します。 excel2003では動いていたのですが2007ではコピー元がBのブックになってしまいます。 実際のマクロは Workbooks(1).Activate Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Windows("B.xls").Activate Sheets("sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True です。 よろしくお願いいたします。

  • 毎回最終セルを探す。

    お世話になります。 マクロは組めないので、 マクロの記録で作ってみましたが、 ActiveCell.SpecialCells(xlLastCell).Select Range("A8356").Select これは、ctrl+end で、最終行を選び、 Home で、A列に行き、カーソルで1行下げました。 そうすると、("A8356")と、固定されてしまい、 次の『Book2』のデータは、下に蓄積されずに、 同じところから上書きをされてしまいます。 ちなみに、全文を載せさせていただきます。 どうすればよいのでしょうか? よろしくお願い致します。 ActiveCell.SpecialCells(xlLastCell).Select Range("A8356").Select Workbooks.Open Filename:= _ "C:\Documents and Settings\t.t\My Documents\Book2.xls" Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy Windows("6965.xls").Activate ActiveSheet.Paste ActiveWindow.SmallScroll ToRight:=8 Columns("T:T").Select Range("T8327").Activate Application.CutCopyMode = False Selection.Style = "Comma [0]" ActiveWorkbook.Save Windows("Book2.xls").Activate ActiveWindow.Close ActiveCell.SpecialCells(xlLastCell).Select Range("A8409").Select End Sub

専門家に質問してみよう