• ベストアンサー

エクセル マクロでのセル選択について

ワークシート上で、ある決められてセル範囲をコピーしたいのですが、コピー元の範囲とコピー先が規則的に変わるので、セル自体を変数として for-netのようなプログラムで実行させたく思っています range("E1:E3") のE1とE3を変数として扱う方法はありますか? 実際のプログラムにイメージは・・・・ E1:E3 を O3:Q3 にコピー F1:F3 を R3:T3 にコピー 次は E11:E13 を O4:Q4 にコピー F11:E13  を R4:T4 にコピー とこんな感じです

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

Rangeの指定方法はいろいろあります。 例えば、以下の方法はみなRange("E3:G5")を指定する場合(セレクトさせてます)を示しています。 a、b、row1、column1、row2、column2、n、mなどは変数です。(a、bは文字変数、他は数値(整数)変数) <方法1>がご質問の通りにa、bの文字変数による指定の場合です。 範囲の変化の規則がわかりませんが、対象範囲を計算などで求めるようなケースでは数値変数の方が扱いやすいので、<方法2>や<方法3>などが便利かと思います。 <方法1>(A1方式で文字で指定) a = "E2"   '*左上 b = "G5"   '*右下 Range(a & ":" & b).Select <方法2>(R1C1方式での指定:左上と右下隅) row1 = 2   '*左上(行番号) column1 = 5  '*左上(列番号) row2 = 5   '*右下(行番号) column2 = 7  '*右下(列番号) Range(Cells(row1, column1), Cells(row2, column2)).Select <方法3>(左上と幅、高さで指定) row1 = 2   '*左上(行番号) column1 = 5  '*左上(列番号) n = 4     '*行数(高さ) m = 3     '*列数(幅) Cells(row1, column1).Resize(n, m).Select

その他の回答 (2)

  • pam_sarai
  • ベストアンサー率36% (4/11)
回答No.3

セル指定方法を3通りほど。 適当に変形して使ってください。 Range("E" & 1 & ":E" & 3).Copy Range(Cells(1, 5), Cells(3, 5)).Copy Range(Cells(1, "E"), Cells(3, "E")).Copy

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

がんばってみました >range("E1:E3") のE1とE3を変数として扱う方法はありますか? >E1:E3 を O3:Q3 にコピー は Cells(3 , 15).Value = Cells(1 , 5).Value Cells(3 , 17).Value = Cells(3 , 5).Value でいけるのでは。 Sub Macro1() Dim i As Integer For i = 0 To 1 Cells(3 + i, 15).Value = Cells(1 + i * 10, 5).Value Cells(3 + i, 17).Value = Cells(3 + i * 10, 5).Value Cells(3 + i, 18).Value = Cells(1 + i * 10, 6).Value Cells(3 + i, 20).Value = Cells(3 + i * 10, 6).Value Next End Sub

関連するQ&A

  • エクセル マクロ

    はじめまして。 エクセルでマクロを使って研究を進めているものです。 最近マクロを使い始めたのですが、ワークシート関数のスクリプトについてご質問があります。 具体的な記述を書いたほうが説明しやすいので、下に記述します。 Sub Macro1() Windows("a.xls").Activate ActiveCell.FormulaR1C1 = "=SUM(RC[-8]:RC[-1])"・・・(1) Range("J3").Select End Sub このような命令があるときに、sum関数の中に変数を入れることを考えます。そのときに、R1C1表示では選択したセルを基準にして変数を考えなくてはいけないので考えにくいです。そこで、イメージとしてですがこのような書き方はできないのでしょうか。 (1)の部分 ActiveCell.Formula = "=SUM(Range(Cells(2, 2), Cells(2, 変数)))" つまり、rangeやcellsを使って書きたいということです。 また、実際のエクセルのセルに入力されている関数をそのままコピーして、それに変数を自分で手直しして加えるような方法がありましたら教えてください。 よろしくお願いします。

  • Excelマクロについて(セルのコピー)

    今、マクロで自動的にセルのデータを別シートに貼り付けるというものを作っています。 Private Sub コピー定義() Worksheets("sheet1").Activate 'sheet1をアクティブにする コピー元行 = 2 コピー先行 = 1 コピー元セル = "A" & コピー元行 コピー先セル = "A" & コピー先行 Worksheets("sheet1").Range(コピー元セル).Copy _ Destination:=Worksheets("sheet2").Range(コピー先セル) End Sub これで、sheet1のA2からsheet2のA1にコピーできるのですが、 Private Sub コピー定義() Worksheets("sheet1").Activate 'sheet1をアクティブにする コピー元行 = 2 コピー先行 = 1 コピー元行 = 2 コピー先行 = 1 コピー元セル = "A" & コピー元行 コピー先セル = "A" & コピー先行 コピー元セル = "B" & コピー元行 コピー先セル = "B" & コピー先行 Worksheets("sheet1").Range(コピー元セル).Copy _ Destination:=Worksheets("sheet2").Range(コピー先セル) End Sub とすると、B2の項目しかコピーされません。複数のセルを一度にコピーするマクロの作り方をご存じの方、ご伝授下さい。

  • EXCEL VBA セルの選択範囲を変化させたい。

    いつもお世話になっております。 Range("E3:E5").Select のようなプロパティで選択するセルの範囲を列、行共に変数で与えたいのですが、 できますでしょうか?

  • エクセル VBA セル範囲の一部解除

    rangeオブジェクト型変数にセル範囲を代入した後、一部のセルを解除したいのです。 グラフを描くためにc列とE列をデータに散布図を描こうとしてます。セル範囲の選択はrange型変数に代入しました。しかしゼロ以下の値のセルは削除したいのです。 for each c in datacell if c.value <0 then c.value="" next c 上記のようにすると目的は達しますが、ワークシート上の値も削除されてしまい、好ましくありません。良い方法はないでしょうか?

  • エクセルのマクロについてご教示下さい。

    シート1のA1からW47までを同じワークシートのA48にコピーするマクロを作りましたが、 Worksheets("Sheet1").Range("A1:W47").Copy _ Destination:=Worksheets("Sheet1").Range("A48") Range("A48")を変数にし、(2回目は48+47 3回目は48+47+47 4回目は48+47+47+47)というように複数回コピーを繰り返したいのですが、とんと分からなくなりました、ご教示いただけますでしょうか? 宜しくお願い致します。

  • エクセルのマクロについて

    エクセル2003を使用しています。もしよかったら教えてください。 【例】 エクセルシートを2つ使うことを前提として、 Sheet1にはA1:F50の6列範囲セルに対して1~60の範囲内の数字が決められた背景色とフォント色に従い元々ランダムに入っております。 次に新たにSheet2を作り、そのE1:J50の6列範囲セルに値を他からコピーしてきた数字がランダムに入っています。 上記Sheet1セル範囲とSheet2セル範囲を比較して、それぞれのセル範囲内の数字がそれぞれ一致した場合、Sheet2のセル群をSheet1のセルの背景色とフォントカラーを同一に変更するマクロがわかりませんでした。 また1~60範囲外数値であれば処理しません。 調べても、数値入力した時点で他のセルの背景・フォント色を同一に変更する方法しか無かったので、For Eachを使い、試してみたのが下記のマクロです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim v, c As Range '//変更されたセル範囲・値をチェックして、関係なければ処理をしない If Target.Count > 1 Then Exit Sub If Intersect(Range("E1:J50"), Target) Is Nothing Then Exit Sub v = Target.Value If Not IsNumeric(v) Or v < 1 Or v > 60 Then Exit Sub '//参照するシートの範囲について順にチェック '//値が同じだったら、フォントカラーと背景色を同じにして終了 For Each c In Worksheets("sheet1").Range("A1:F50") If c.Value = v Then Target.Interior.ColorIndex = c.Interior.ColorIndex Target.Font.ColorIndex = c.Font.ColorIndex Exit For End If Next c End Sub これで実行するとSheet2に数値を新たに入力してうまくいきます。 ただ、Sheet2へ他からコピーしてきた数値のセル背景・フォント色を変更することができないです。 上記の作業を次から次へと新規で対応しなければならず、数値の入力に疲れてきております。 うまくいくマクロありますでしょうか?

  • 指定セルへ転記するマクロで値が無い場合固定値転記

    シート2の1行目の指定したセルの値をシート1の指定セルに 転記を行いシート1が印刷。 印刷後はシート2の2行目の指定したセルの値をシート1の指定したセルに 転記してシート1が印刷。 シート2にデータが無くなったら停止という以下のマクロにて シート2のO列はシート1のセルA19に順次転記なのですが O列は運用上空白が有る場合が判明した為 値がある場合はその値を転記、値が無い場合は半角で ZZZ と 転記をしたいのですがどこを変更していいのか分かりません。 よろしくお願いします。 Sub データ転記() Dim myRng(1 To 23) Dim cpRng Dim i As Integer Dim n As String, myStr As String With Sheets("Sheet2") Set myRng(1) = .Range("B2") Set myRng(2) = .Range("C2") Set myRng(3) = .Range("D2") Set myRng(4) = .Range("D2") Set myRng(5) = .Range("D2") Set myRng(6) = .Range("E2") Set myRng(7) = .Range("E2") Set myRng(8) = .Range("F2") Set myRng(9) = .Range("F2") Set myRng(10) = .Range("H2") Set myRng(11) = .Range("J2") Set myRng(12) = .Range("K2") Set myRng(13) = .Range("K2") Set myRng(14) = .Range("L2") Set myRng(15) = .Range("M2") Set myRng(16) = .Range("N2") Set myRng(17) = .Range("O2") Set myRng(18) = .Range("P2") Set myRng(19) = .Range("Q2") Set myRng(20) = .Range("R2") Set myRng(21) = .Range("S2") Set myRng(22) = .Range("U2") Set myRng(23) = .Range("G2") End With cpRng = Split("B10,O4,G3,F10,F13,G10,G13,H10,H13,O3,L10,M10,M13,O5,E19,F19,A19,O6,D21,B6,I19,J19,G5", ",") '転記先配列化 With Sheets("Sheet1") .Range("B10,G3,F10,F13,G10,G13,L10,E19,F19,J19,O7,O8,C19,D10,D13,A19,O4,O5").NumberFormatLocal = "@" Do While myRng(1) <> "" For i = 1 To 23 .Range(cpRng(i - 1)).Value = myRng(i).Value Next .Range("C3,C13").Value = Left(.Range("O3").Value, 10) .Range("C10").Value = Mid(.Range("O3"), 11, 6) .Range("O7").Value = Format(Range("O6").Value, "0000000") .Range("O8").Value = Format(Range("J19").Value, "0000000") Call 加工01 Call 加工02 '印刷 .PrintOut For i = 1 To 23 Set myRng(i) = myRng(i).Offset(1) Next i Loop .Range("B10,O4,G3,F10,F13,G10,G13,H10,H13,O3,L10,M10,M13,O5,E19,F19,A19,O6,D21,B6,I19,J19,C3,C10,C13,C19,D10,D13,O8,O7,G5").ClearContents End With For i = 1 To 23 Set myRng(i) = Nothing Next MsgBox "印刷終了" Sheets("Sheet2").Select Cells.Select Selection.Delete Shift:=xlUp Sheets("Sheet1").Select Range("C3").Select End Sub

  • エクセル2000のマクロについて教えてください。

    実は、今日会社で失敗したのですが、エクセルのマクロ実行をしたら、エラー で実行中断となってしまいました。 ワークシートから別のワークシートへコピー&ペーストして印刷というマクロを組みたかったのですが、エラー内容は、 Active Cell Offset(-7,-14).Range("A1:AN15")selectです。 元のワークシートのセル位置と、コピーするワークシートのセル位置は同じ場所でないといけないのでしょうか? セルは同じ数とっているはずなのですが。何回かやってみて、 へんな場所にペーストされて、印刷までは出来たこともあるのですが、何がちがうのだろー。。解らない(;;) だれか教えてください!!!

  • Excel2007VBA セル範囲の選択について

    ●質問の主旨 任意に変わる、最終行でデータ入力がされているセルを取得し、 かつそのセルを別のセルと組み合わせて範囲選択するためには どうすれば良いでしょうか? 具体的には1.の記述と同じにするためには,2.の記述を どのように変えたらいいでしょうか?ご存知のかたよろしくお願いします。 1. Range("A3:E50").ClearContents 2. Range("A3:Range("A1").End(xlDown).Offset(0, 4)").ClearContents ●質問の詳細 1. 現在現金出納帳を作成しています。 当月が終わったら次月用として当月用のシートをコピーします。 2. コピーするシートの雛型は同じですが、収支項目、収支金額等は、 一旦クリアします。 3. "A3:E50"は収支項目、収支金額の範囲で、 E50はシートの体裁を合わせるための名目的なセルです。 ※ 現金出納帳なだけにE50の位置は毎月変わります。 収支項目の多い月は月中に行を挿入して、 最終セルがE60やE75になるかもしれません。

  • エクセルでセルをクリックすると“○”と入力したい。

    VBA”超”初心者です。 理屈抜きにして結果だけ教えていただきたいことがございます。 課題である表記を実現するために、 ワークシートエリアに以下を記しました (サイトからコピーしてきただけですが。。) 同時に同じワークシート内において、 "R18:R103" においても'処理対象としたいのですが、 どう改造すればよいでしょうか? (追伸)それと、シングルクリックバージョンも検討したいのです。よろしくお願いします。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "O18:O103" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" Else Target.ClearContents End If End If End Sub

専門家に質問してみよう