指定範囲で1列おきに2列選択

このQ&Aのポイント
  • マクロで記録した選択を実行することはできません。
  • 関数式が入っている列を除いて他の範囲でも同じ操作を行いたいです。
  • 範囲内のセルの値を取得するために「形式として貼り付け」-「値」としたいです。
回答を見る
  • ベストアンサー

1列おき2列選択

 指定範囲(I9:CW40)の中で1列おきに2列選択したいのですが 、当然ですがマクロで記録はできても実行できませんし2行1列には関数式が入っているのでこれを除いて他の範囲(I71:CW99)に同じように1列おきに2列に「形式として貼り付け」ー「値」としたいのですが、お教え願えませんでしようか? Sheets("メイン").Select Range( _ "J9:K40,M9:N40,P9:Q40,S9:T40,V9:W40,Y9:Z40,AB9:AC40,AE9:AF40,AH9:AI40,AK9:AL40,AN9:AO40,AQ9:AR40,AT9:AU40,AW9:AX40,AZ9:BA40,BF9:BG40,BI9:BJ40,BL9:BM40,BO9:BP40,BR9:BS40,BU9:BV40,BX9:BY40,CA9:CB40,CD9:CE40,CG9:CH40,CJ9:CK40,CM9:CN40,CP9:CQ40,CS9:CT40,CV9:CW40" _ ).Select Range("CV9").Activate Selection.Copy End Sub

  • Rord
  • お礼率67% (25/37)

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

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

1列おきに2列に「形式として貼り付け」ー「値」としたいのですが マクロの記録にばかり頼っていると、どうしてもコピーと貼り付けをイメージしてしまいますが 簡単な式で、値をほかのセルへ入れることが出来ます。 例えば Sheets("コピー先").Range("J9:K40").Value=Sheets("メイン").Range("J9:K40").Value とかでできます。 今回の質問の場合、列(JとかK)を順に変えたいので Cellsプロパティを使って Sheets("コピー先").Range(Sheets("コピー先").Cells(9, 10), Sheets("コピー先").Cells(40, 11)).Value =・・・ と記述することになります。 Sub Macro1() Dim j As Integer Dim k As Integer j = 10 k = 10 For i = 1 To 3 Sheets("コピー先").Range(Sheets("コピー先").Cells(9, k), Sheets("コピー先").Cells(40, k + 1)).Value = _ Sheets("コピー元").Range(Sheets("コピー元").Cells(9, j), Sheets("コピー元").Cells(40, j + 1)).Value j = j + 3 k = k + 2 Next End Sub j = 10 k = 10 For i = 1 To 3 ・・・ はそちらの都合に合わせて変更してください。 http://excelvba.pc-users.net/index.html などのサイトを参考にして勉強してみてください。

Rord
質問者

お礼

 ご回答ありがとうございます。それにしてもあまりにも自分の勉強不足で質問ばかりすればいいというものではないと痛感しました質問するならそれなりのレベルになってからでこれから本当に困った時に助力を願えるようにします。 重ね重ねありがとうございます。

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

連続した四角に囲まれたセルの範囲を選択して貼り付けることはできますが離れたセルを同時に選択して貼り付けることはできませんね。 For Next ステートメントなどを使って順にコピーし貼り付けていくのがよいでしょう。

関連するQ&A

  • excel vba 2000 rangeの範囲指定でGlobalエラー

    はじめて質問させていただきます。 excel 2000のvbaでRange("B:C,D:E,F:G,H:I,J:K,L:M,P:Q,T:U,V:W,Z:AA,AB:AC,AD:AE,AF:AG,AL:AM,AN:AO,AP:AQ,AR:AS,AT:AU,AV:AW,AX:AY,AZ:BA,BB:BC,BD:BE,BF:BG,BH:BI,BL:BM,BN:BO,BP:BQ,BR:BS,BT:BU,BV:BW,BX:BY,BZ:CA,CB:CC,CD:CE,CF:CG,CH:CI,CJ:CK,CL:CM,CN:CO,CP:CQ,CR:CS,CT:CU,CV:CW,DB:DC,DD:DE").Select のように非常に長い文字列で範囲を指定した場合、「Rangeメソッド失敗'_Global'オブジェクト」というようなメッセージが出ます。 最後のDD:DEをやめたり、連続する列をまとめるとエラーになりません。 どうも文字列に制限があるように思いますが、回避方法をご存知の方ご教示ください。

  • Vlookup関数で行と列を両方Loopで回したい

    エクセル2010です。 Vlookup関数を使って、下記のようなコードを作りました。 行のLoopはできたのですが、列がわからなくて 1列ごと、50列まで書きました。 列のLoopはどうすればいいのでしょうか? よろしくお願いいたします。 Sub 毎月集計() Dim i As Byte Dim 範囲 As Range Dim myV As Variant Sheets("実績").Select Set 範囲 = Worksheets("2月").Range("B7:AZ20") For i = Application.InputBox("開始行を半角で入力してください。", Default:=123, Type:=1) To Application.InputBox( _ "最終行を半角で入力してください。", Default:=123, Type:=1) myV = Application.VLookup(Range("B" & i).Value, 範囲, 2, False) If IsError(myV) Then                Range("C" & i).Value = "0"         Else Range("C" & i).Value = myV End If myV = Application.VLookup(Range("B" & i).Value, 範囲, 3, False) If IsError(myV) Then Range("D" & i).Value = "0" Else Range("D" & i).Value = myV End If 以下省略 Next i End Sub

  • Excel2013VBA列選択の拡大

    ExcelVBA2013です。 列の取得でつまづいております。 お手数ですが、ご教授下さい。 下記のコードで選択範囲のコピー貼り付けは出来ていますが、列幅がコピーされていませんでした。 CC3のセルを基準にOffsetとResizeで範囲拡大してコピーしているためだと思います。 CC3の左隣のAX3:CB3はセル結合されています(○月)。(その下の4行目は日付の1~31が入力) 列は、今回はAX3:CC3まで(1月分)取得できればよいです。(可変します) MaxCol = Range("J5").End(xlToRight).Column  で列取得できます。 行の位置は、MaxRow = Range("I5").End(xlDown).Row  で取得した値です。 それで、列全体を取得しようと、 MaxCol = Columns(MaxCol).Select で最終列は取得できましたが、そこから列選択の拡大ができればと思っています。 現在は、AX3:CC237まで取得コピーして、隣の列に貼り付けで列幅が違う。 希望はAX:CCまでの列を取得選択コピーして貼り付け。 Sub SAMPLE() Dim MaxRow As Variant, MaxCol As Variant Dim r As Range, c As Range MaxRow = Range("I5").End(xlDown).Row '最終行番号 MaxCol = Range("J5").End(xlToRight).Column '最終列番号 Set c = Cells(3, Cells(3, Columns.Count).End(xlToLeft).Column) '表の右上角のセル番地を取得 c.Select c.Offset(0, -31).Resize(MaxRow - 2, 32).Copy c.Offset(0, 1) '表右上から1月分選択範囲拡大してコピー隣の列より貼りつけ End Sub

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

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

  • 複数行の最下行の範囲選択

    こんにちは、マクロ初心者です。    A  B  C  D  E  F  G  H  I 1  あ  あ  あ        あ  あ     あ 2  あ  あ  あ        あ  あ     あ 3  あ     あ                 あ 4        あ                 あ 5        あ                 あ 6        あ                 あ 7        あ                 あ 8        あ                 あ 9        あ 10 上記のような表があるとき セル"A"列から"I"列までの最下行にあたる行を検索し、 更に最下行までの範囲をコピーして、別シートにコピーさせたいのです。 (上記の例だと、セル"A1"~"I9"の範囲をコピーする) Range("A1", Range("I1").End(xlDown)).Select Selection.Offset(0, 0).Select 上記のコードでできると思ったのですが、なぜか不必要な範囲まで選択されてしまいます。 (下方向に数行余計に選択されてしまう) これではダメなのでしょうか? ちなみに、数式などは入っておらず、入力されていないセルは全て空白です。 A列だけの最下行を選択するというのは簡単に出来たのですが、このように複数の範囲を 選択する場合は、どのようにコードを書くべきでしょうか。 マクロのスキルが無い為困っています。 アドバイスをよろしくお願いいたします。

  • Excel VBA の構文を教えてください。

    Excelにて、I列に分類条件が、”決", "D", "E*〇", E*△", 4種類あります。 (空白行もあり)計算済み数値がCP 列以降EO列まで記載されています。 セルCP2 (決+D+E*〇+E*△) 合計 セルCP5 (決+D) 合計 セルCP2 (決+D+E*△) 合計 JA2からJA18まで一旦、保存しています。 これをCP列からEO 列まで計算したいのですが、添付のようなVBAになってしまいました。 元データの加工によっては、行列が違ってくる事もあります。 VBA でシンプルに作成可能でしょうか?また、何となくExcel 関数でも簡単な方法がありましたら、 ご教授願います。(VBA初心者です)よろしくお願いします。 Sub 集計条件に一致した数値の合計() 'CP列 Range("JA2") = WorksheetFunction.SumIf(Range("I:I"), "決", Range("CP:CP")) Range("JB2") = WorksheetFunction.SumIf(Range("I:I"), "D", Range("CP:CP")) Range("JC2") = WorksheetFunction.SumIf(Range("I:I"), "E*○", Range("CP:CP")) Range("JD2") = WorksheetFunction.SumIf(Range("I:I"), "E*△", Range("CP:CP")) Range("CP2") = WorksheetFunction.Sum(Range("JA2:JD2")) Range("CP5") = WorksheetFunction.Sum(Range("JA2:JB2")) Range("CP6") = WorksheetFunction.Sum(Range("JA2:JC2")) 'CQ も同様に I列を検索して、 CQ列にある数値を一旦保存して、 CQ2 CQ5 CQ6 に結果を表示する

  • ExcelVBAで「Cells」を使ってセルの選択範囲を指定する方法

    例えば、セル「A1」から「C5」とセル「F1」から「I4」の範囲を選択する場合、 Range("A1:C5,F1:I4").Select としますがこれを「Cells(Row,Column)」を使うやり方はどのようにすればよいのでしょうか? Range(Cells(1, 1), Cells(5, 3)).Select Range(Cells(1, 6), Cells(4, 9)).Select 上記のような二つに分けてプログラムを動かすのではなく、あくまでセル「A1」から「C5」とセル「F1」から「I4」の範囲を同時に指定する方法です。 回答よろしくお願いします。

  • G列に入っているデータの行までB列を範囲指定して

    G列に入っているデータの行までB列を範囲指定して B列に1を入力したいのですが、 Range(B & "1" & ":" & B & IngKns).Selectでシート全てが指定され シート全てに1が入力されてしまいます。 何がいけないのでしょうか? 例えばD列が1~30行目までデータが入っていればB1~B30まで1を入力 したいのですが。。。 Dim l_xlsSheet As Worksheet Set l_xlsSheet = ThisWorkbook.Worksheets("Sheet1") ' IngKns = WorksheetFunction.Count(l_xlsSheet.Cells.Range("G1:G65536")) ' Range(B & "1" & ":" & B & IngKns).Select Range(B & "1" & ":" & B & IngKns) = 1

  • エクセルVBAでセル範囲選択→並べ替え

    大きなデータを選択する場合でA列には空白がない場合、 Range("A1").CurrentRegion.Select でいいと思うのですが、このデータを並べ替えようとするとき、1行から4行めには別の文字列がはいっており、5行目以下がデータであるとき、 Range("A1").CurrentRegion.Offset(4).Selectで下にさげると、最終選択範囲も下がってしまいます。 最終の範囲を変えず、開始位置を5行目にかえるにはどうすればよいのでしょうか?

  • Excel 2010 で勤務割表を作成しています。

    月間の勤務割表を作成しています。 3列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。 列に日付、行を個人名(max16名)としますから、3列3行の枡が496個となります。 各枡とも1列目の1行目に勤務種別コード(1~5)を記述し、このコードNoにより4種の図形を貼付けています。 1つ1つの枡(496個)に以下のコードを書き実行しています。膨大な行数を要します。 使用するパソコンにおいては実行速度がかなりかかります。 これをもっと単純化する手法についてご教示いただければ幸いです。 Sub Macro1() Select Case Range("I6").Value '1人目-1日 Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Range("J7").Select ActiveSheet.Paste Case 2: ActiveSheet.Shapes("四角形2").Select Selection.Copy Range("I7").Select ActiveSheet.Paste Case 3: ActiveSheet.Shapes("四角形3").Select Selection.Copy Range("J7").Select ActiveSheet.Paste Case 4: ActiveSheet.Shapes("直線1").Select Selection.Copy Range("I6").Select ActiveSheet.Paste Case 9: ActiveSheet.Shapes("四角形3").Select Selection.Copy Range("J7").Select ActiveSheet.Paste End Select  '|   '| <同じことを一つ一つの枡ごとに繰り返し記述しています。>   '| Select Case Range("CU51").Value '16人目-31日 Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Range("CV52").Select ActiveSheet.Paste Case 2: ActiveSheet.Shapes("四角形2").Select Selection.Copy Range("CU52").Select ActiveSheet.Paste Case 3: ActiveSheet.Shapes("四角形3").Select Selection.Copy Range("CV52").Select ActiveSheet.Paste Case 4: ActiveSheet.Shapes("直線1").Select Selection.Copy Range("CU51").Select ActiveSheet.Paste Case 9: ActiveSheet.Shapes("四角形3").Select Selection.Copy Range("CV52").Select ActiveSheet.Paste End Select End Sub

専門家に質問してみよう