• ベストアンサー

EXCEL VBAでのセル高の範囲指定コピーについて

いつも活用させて頂いております。 ExcelのVBAで、範囲指定したセルのコピーを行い、コピー先のセルに コピー元のセルの高さをコピーさせるロジックを組みました。 始めは、範囲指定してセル高もコピーしようとしたのですが、 上手く行かなかったので、現在は、ループさせて1行ずつ行っています。 できれば、範囲指定して一括で行いたいのですが、 そのような事は可能なのでしょうか? ご教授願います。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

行が連続しているのであれば、 Rows("10:15").RowHeight = 20 こんな感じで、行10~15のセルの高さが 20mm になります。

forester
質問者

補足

早速のご回答、ありがとうございます。 確かに、同じ高さにするのであれば、上記のロジックでできるのですが、 コピー元のセル高を貼付け先のセルに反映させたいので、 申し訳ないのですが、上記のロジックでは実現できません。 現在の手順を以下に示します。(全てVBA) 1.コピー元を範囲選択する。 2.貼付け先セルを選択して、貼付けをする。 3.ループさせて、コピー元のセルの高さを貼付け先のセルの高さに1行ずつ反映させる。 この3.の部分をループでなく、1命令で行う事はできないのでしょうか?

その他の回答 (3)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

下記マクロを作ってみました。同一シートのみで可能です。標準モジュールに貼り付けます。 ショートカットキー Ctrl+Shift+A 等に割り当てて下さい。 コピー元を選択し、コントロールキーを押しながらコピー先の左上セルを選択します 順番は逆でもかまいません。複数セルが含まれる矩形セル範囲と単一のセルが指定されていることが要件です。 (これは単一セルと単一セルのコピーと他シートへのコピーは対応していません。) 参考にして下さい。 Public Sub copyExt() Dim rg As Range '選択セルが要件を満たしているか調べるワーク変数 Dim rgSelect(2) As Range '選択セル、rgSelect(1)をrgSelect(2)に貼り付ける '*** 選択の検証 *** If Selection.Areas.Count <> 2 Then 'セルの選択方法の確認(2個?) MsgBox "セル選択方法が不正です。" & vbCrLf & "(セル範囲が2個でない)" Exit Sub End If With Selection If .Areas(1).Count = 1 And .Areas(2).Count = 1 Then MsgBox "単一セル同士のコピーはできません。m(_ _)m" Exit Sub End If If .Areas(1).Count = 1 Then 'セルの選択方法の確認(片方は単一セル?) Set rgSelect(1) = .Areas(2): Set rgSelect(2) = .Areas(1) ElseIf .Areas(2).Count = 1 Then Set rgSelect(1) = .Areas(1): Set rgSelect(2) = .Areas(2) Else MsgBox "セル選択方法が不正です。" & vbCrLf & "(片方は単一セルにします)" Exit Sub End If End With '*** コピー実行 *** rgSelect(1).Select: Selection.Copy 'コピー rgSelect(2).Select: ActiveSheet.Paste '貼り付け '*** 行高を一致させる *** Application.ScreenUpdating = False '画面の表示更新を禁止 Dim rw As Long '行カウンタ Dim rwHght1, rwHght2 As Single '行高 For rw = rgSelect(1).Rows.Count To 1 Step -1 rwHght1 = rgSelect(1).Rows(rw).RowHeight '元の行高 rwHght2 = rgSelect(2).Rows(rw).RowHeight 'コピー先の行高 If rwHght1 <> rwHght2 Then rgSelect(2).Rows(rw).RowHeight = rwHght1 '行高を同じにする End If Next Application.ScreenUpdating = True '画面の表示更新を可にする End Sub

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.3

指定範囲をコピーして、その後行の書式コピーで有れば出来ますが、あまり言い方法ではないですね。 例えば行2~6を行8~12に高さを設定する方法(書式コピー) Rows("2:6").Select Application.CutCopyMode = False Selection.Copy Rows("8:12").Select Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= False, Transpose:=False

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> ループでなく、1命令で行う事はできないのでしょうか? そうか、高さはばらばらだったんですね。多分できないと思います。 Range には、それに該当するプロパティが無い。 先の回答で紹介した RowHeight は、選択範囲のセルがばらばらの 高さの場合には Null を返すので、代入する意味が有りません。

関連するQ&A

  • EXCEL VBA コントロールのコピー&ペースト

    いつも活用させて頂いております。 excelのvbaで、コピー元のセルを範囲指定して、ペーストするロジックを書いています。 コピー元のセルには、コントロール(テキストボックスなど)が配置されているのですが、これを一緒にコピー&ペーストする事はできないでしょうか? 一緒にできないのであれば、セルのコピー&ペーストのあとにコントロールのコピー&ペーストができるような方法があれば、ご教授願います。 よろしくお願い致します。

  • VBAでのセル範囲指定について

    お世話になります。 私が分からないのは、VBAでのセル範囲指定なのですが、 例えば、シートにデータが有、そのデータの1行目は見出しなので 2行目からデータが入っているセルまでの範囲を指定、コピーして 隣のシートに貼付したいのですが、そのデータの入力される範囲が 毎回違います。「CurrentRegion.Select」としてしまうと、1行目 の見出しまでも範囲指定されてしますので、どうやったら良いのか どなたかお教え頂きたく宜しくお願い申し上げます。

  • EXCELで広い範囲のセルに簡単にコピーする方法

    EXCEL2003で大き目のデータを取り扱っています。 たとえば、A1のセルの内容をA1000まで簡単に一括コピーする方法はないでしょうか? いま、A1をコピーしてA2:A1000でマウスを動かして範囲指定しながらコピーしていますが、範囲指定する時間がわずらわしく感じます。 EXCELのワザでも、VBAでもどちらでもいいので教えて下されば助かります。

  • エクセルVBA 指定したセルの行を指定したい

    エクセルVBAで、指定したセルの行をコピーして、コピーしたセルの挿入をしたいです。 どのような文章で、書けばいいでしょうか;; よろしくお願いいたします

  • 複数のエクセルファイルの指定範囲をコピーするには?

    複数のエクセルファイルの指定したセル範囲を、一括して他のエクセルファイルにコピーするフリーソフトがあれば教えてください。 例えばA,B,Cという名前のエクセルファイルを、それぞれ1行目だけを抽出して(指定したセル範囲)、Dという新規のエクセルファイルに並べてコピーするといった具合です。

  • Excelのセル範囲コピー

    ExcelVBAでセル範囲を指定して別のセル範囲にコピーします。 このとき、コピー元が空白のセルはコピーしない、あるいはコピー先のセルに関数が定義されていればコピーしないようにする方法はあるでしょうか。 もちろん、1セルごと処理すればできますが、スピードアップの為、範囲指定してまとめてやりたいのです。 バージョンは2003以降です。

  • EXCEL 指定のフォルダ内にあるエクセルをコピー

    どなたかVBAの記述(コード)を教えて下さい。 指定のフォルダ内にあるエクセル(コピー元)を開きコピー、データを順次、指定のエクセル(コピー先)のシートの上から順番に貼付していきたいのです。コピー貼付が終わったら、コピー元のファイルは別のコピー済のフォルダへ移したいです。 フォルダ名は、自分で指定できますが、コピー元のエクセルのファイル名とシート名は一定ではありません。(コピー元ファイルはシート1枚のみ)。セル範囲は、A~F列、行は毎回変動するので、一番下の行を判定する必要があります。 コピー先のファイルは、指定のシート(※)に上から順番に貼り付けをしたいです。 (※セルに入力して指定したいです。) 不足事項などがありましたら、ご指摘いただけると助かります。 よろしくお願いいたします。 なお、簡単な関数のVBAは理解して使えるのですが(IF~ End If、For ~Next 等)、 イベントのプロシージャーなどが今だ理解できず、自分では書くことができません。 そのため。多少コードが長くなってもいいので、イベント・プロシージャーをなるべく使わない書き方のほうが自分で修正することができ、助かります(イベントを使わないと難しい処理でしょうか・・・)。

  • Excel セル範囲指定

    Excel VBA で、オフセット先のセルと一つ右のセルとを範囲指定する記述方法を教えて下さい。よろしくお願いします。 Range("????????????????").Select

  • エクセルでの行数・列数を指定しての一括コピーの方法

    エクセルの活用テクニックについて質問させていただきます。 よろしくお願い致します。 エクセルで、A1のセルに入っている内容を、 「A列の1000行目まで一括でコピーする」なので、 行数を指定しての一括コピーというのできるのでしょうか? また、もし可能であるとすれば、 行だけではなく列でもそういった事は可能でしょうか? ご存知の方がいらっしゃれば、教えていただけると助かります。 よろしくお願い致します。

  • エクセル2003VBAで選択範囲

    いつもお世話になっています。 エクセル2003を使用しております。下記を関数又はVBAの組み方・構文を教えて下さい。 (1)E列には、「1」と「.」と「空白」が入っています(「1」が入ってないケースもあります)が、「1」を検索します。もし「1」が無ければ、J列を同様に検索します。(中身はE列と同じです) (2)「1」が入っているセルから見て、「行」の±10の範囲内を選択し、別シートにコピーする。 例1. 1が入っているセルが、「E15」とします。 この場合、コピーしたい範囲は、5行目全部~25行目全部です。 例2. 1が入っているセルが、「E17」とします。 この場合、コピーしたい範囲は、7行目全部~27行目全部です。 分かりにくいかもしれませんが、よろしくお願いします。

専門家に質問してみよう