No.1ベストアンサー
- 回答日時:
>ActiveWorkbook.ActiveSheetの、例えばC3からI3まで結合されているセルを基準ActiveCellにして
何がアクティブセルになっているのか、まず調べてみましょう。
○状況
C3からI3まで結合済みにしてある
sub macro1()
range("C3").select
msgbox activecell.address
end sub
>行方向は4から17セルまで列方向はC列からI列までをコピーしたい
このように(コピーしたい範囲の)行数や列数が「既知である」と前提を置いてしまうと、「C3:I3が結合されている」とかはどうでもよくなってしまいます。
sub macro2()
range("C3").select
activecell.offset(1).resize(14,7).copy
end sub
そうではなくて何か結合セルの「今の姿」を基準にどーにかしたいなら、上述マクロ2の「7」あるいは「14」の部分に、今の状態から該当する数値を拾ってきて当てはめるような工夫をします。
No.3
- 回答日時:
補足を読ませていただきました。
まだ本当によく理解できていないのですが、もしかしたら、コピーの範囲をマクロで決めて、ユーザーの任意で貼付けするということでしょうか?
もし、そうなら、かなり特殊なマクロで、一般的ではありません、できないわけではないのですが。
それとも、「日付の[C3:I3]」を選んだ時点で、[C4からH17]を範囲選択するというものでしょうか?
>Range(ActiveCell, ActiveCell.Offset(13, 6)).COPY
ActiveCell が、結合セルなら、この方法ではうまく行きません。
そこに、結合セルを含めると、列はずれてしまいますから、結合セルは、別にしなければなりませんね。
むろん、I列が空の状態なら、なんら問題はないはずです。
大事なのは、そのコピーした後の、貼り付け先が重要な鍵になるはずです。
****
>日付の下の行の内容をコピーしたいと思っています。
というだけなら、
#1さんがお書きなった方法で良いはずです。
'//
Sub Test1()
If ActiveCell.MergeCells Then
ActiveCell.Offset(1, 0).Resize(14, 6).Copy
End If
End Sub
'//
しかし、貼り付け先が、後で決まるような場合で、なおかつ、結合セルを含める場合は、例えば、このような複雑なスタイルになってしまいます。
[結合セルの日付]をダブルクリックすると、その下の範囲がコピーされます。そして、任意の場所を右クリックすると、まず、データ部分を一行下に貼り付けて、次に、右クリックした場所に、[日付の部分]を貼り付けます。本来、コピーする前に、結合セルを通常セルに戻してしまい、その後で、結合セルに戻す方法でもよいかと思います。二つのマクロがセットになります。
'//
'シートモジュール
Dim rng As Range
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'ダブルクリック(コピー用)
Cancel = True
If Target.MergeCells Then
Set rng = Target.Offset(1, 0).Resize(14, 6)
rng.Copy
End If
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'右クリック(貼り付け用)
Cancel = True
If Not rng Is Nothing Then
Target.Offset(1).PasteSpecial
rng.Offset(-1).Cells(1).MergeArea.Copy Target
End If
Set rng = Nothing
End Sub
'//
まだ、私は、よく分っていないかもしれませんが、たぶん、コードの考え方は、多少の参考になるのではないかと思っています。
<#1さんがお書きなった方法で良いはずです。
そうでした。#1さんの回答を見落としていました。
とりあえず、コピーして貼り付けるんですがそちらは一応素人なりの書き方で完成しているんで大丈夫ですがコードの書き方は参考になります。お手数をおかけしました。
どうもありがとうございました。
No.2
- 回答日時:
ご質問の趣旨がよく理解できないのです。
結合セルが[C3:I13]まであって、
・行方向は4から17セルまで →これはよく分からないです。3からではないでしょうか?
・列方向はC列からI列までをコピー
これは、結合セルを一つにして、コピーするという意味だと思いました。
というなら、要するに、結合セルというものは、「左上端のセル」を基点としているから、
Range("B3").MergeArea.Copy Range("B17")
こういうことではないのかな?
それとも、たんに17行先なら
With Range("B3")
.MergeArea.Copy .Offset(18)
End With
一番上にセルの基点として、17行先なら、
With Range("B3").MergeArea
.Copy .Offset(17 - .Rows.Count, 0).Resize(.Rows.Count, .Columns.Count)
End With
こういうことかな?
この回答への補足
すいません、書き方がだいぶ悪かったです。
結合セルが[C3:I3]まであって(その下の行は結合されていません、列方向は同じく結合セル[J3:P3]・・・と続いている)、そのセルを選択してアクティブな状態にしている時に、C4からH17までOFFSETでコピーしたいのです。
もっと書くと
結合セル[C3:I3]には日付が入っており、日付の下の行の内容をコピーしたいと思っています。日付が変われば[J3:P3]を選んだりして列が変化するので、セルの番地での指定はできません。
とりあえず、現在はC4(やJ4・・・)を選択した状態で
ActiveWorkbook.ActiveSheet.Range(ActiveCell, ActiveCell.Offset(13, 6)).COPY
でC4からH17までコピーしていますが(実際はさらにその下の方もいくつかOffsetで位置を取得してコピーしていきます)、日付を選んだ状態の方が、別の人が使う時操作的に分かりやすいので変更したいのですが、結合したセルを基準にOFFSETで位置を指定しても、どうしてもC4からH17までを選べず列がずれたりするのでどういう指定をすればよいのか知りたいのです。(または、あきらめた方がよいのかな?、とか名前を定義すればいけるのかな?日ごとに定義が必要?)
すいません、この説明で内容の方よろしいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Excel(エクセル) セルを数式で指定する方法 5 2022/04/13 16:55
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) エクセルの印刷範囲をページ単位で可変にする方法 3 2022/05/23 13:04
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセルVBA 任意のセルの選択時、指定のセルの値を表示 1 2023/04/21 08:13
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
文字列から英数字のみを抽出す...
-
エクセル1行おきのセルを隣の...
-
セルを結合した時のエクセル集...
-
EXCELでマイナス値の入ったセル...
-
excelで、空白を除いてデータを...
-
自分の左隣のセル
-
エクセルで、指定の値よりも大...
-
一時間当たりの製造数を調べた...
-
エクセルで、A2のセルにA3...
-
Excelで大量のセルに一気に関数...
-
エクセル 平日と土日祝の時間...
-
何時から何時までを○○、何時か...
-
同一セル内の重複文字を削除し...
-
エクセルで特定のセル内にだけ...
-
エクセル、○が連続する回数を数...
-
エクセルでエンターを押すと任...
-
EXCELのcountif関数での大文字...
-
セルの結合がされた表をHLOOKUP...
-
【Excel】IF文「ある文字を含ん...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
エクセル1行おきのセルを隣の...
-
文字列から英数字のみを抽出す...
-
自分の左隣のセル
-
excelで、空白を除いてデータを...
-
エクセルで、指定の値よりも大...
-
セルを結合した時のエクセル集...
-
条件付き書式の色付きセルのカ...
-
EXCELでマイナス値の入ったセル...
-
EXCELのcountif関数での大文字...
-
エクセルで、A2のセルにA3...
-
Excelで離れた位置のAVERAGEを...
-
同一セル内の重複文字を削除し...
-
エクセルで特定のセル内にだけ...
-
Excelで大量のセルに一気に関数...
-
セルの内容表示が邪魔になる
-
エラー「#REF」の箇所を置き換...
-
エクセルで年月日から月日のみへ
-
【Excel】4つとばしで合計する方法
-
週の労働時間を計算するエクセル
おすすめ情報