- ベストアンサー
Excel VBAで選択されたセルの範囲を別のセルに書き込む方法
- Excel VBAを使用して、選択されたセルの範囲(単一セルまたは複数セル)を別のセルに書き込む方法について教えてください。
- また、ブックを閉じる際に、選択されたセルの範囲を指定したシートの指定セルに書き込み、ブックを開く際に指定したシートの指定セルの値に応じてセル範囲を選択する方法も知りたいです。
- どなたか、Excel VBAに詳しい方、ご教示いただけませんか?よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
問題はありません。 [A1]をWorksheets("作業用").Cells(3, 7)に置き換えればいいです。 やってみて、ダメだったら質問してください。 >検索の仕方が下手で、なかなか出てきません。 とあったので、検索の仕方を 「activecell 範囲の取得」 「vba 名前の取得」 をキーワードにすれば出てきます。
その他の回答 (2)
- SI299792
- ベストアンサー率47% (772/1616)
書き込む指定セルが何処かわからないので、とりあえずA1にします。 selectされているrange を表す文字列 [A1] = Selection.Address 名前 [A1] = Selection.Name.Name 少し変ですが、Nameを2つ重ねると名前を取得できます。名前がついていなければエラーになります。 単一セル・複数セル共に、名前がついていたら名前、ついていなければrange を表す文字列、ということですが、これらを組みわせて、 [A1] = "" On Error Resume Next [A1] = Selection.Name.Name On Error GoTo 0 ' If [A1] = "" Then [A1] = Selection.Address End If A1に名前がはいっていようが、range を表す文字列が入っていようが、 Range([A1]).Select で、指定ができます。 余談ですが、指定セルが固定でない場合、 Range(Range(rangestr)).Select Range(Cells(Row, col)).Select という書き方になりますが、判りくい上バグの元なので、私なら、 wkstring = Cells(Row, col) Range(wkstring).Select とします。 selectされているrange を表す文字列 https://msdn.microsoft.com/ja-jp/library/cc344295.aspx セルの名前の取得。 http://blog.livedoor.jp/katsuyausami/archives/51494897.html
補足
ありがとうございます。基本的な道筋は見えてきました。ただ、これはVBAを使う者には基本中の基本でしょうが、結果を書き込むセルをA1ではなく、「Worksheets("作業用").Cells(3, 7)」にしたい場合は[Worksheets("作業用").Cells(3, 7)]ではダメでしょうか?よろしくお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
珍しいニーズの質問と思うので、 実際に活用したことがないのですが、思い付きです。 セル範囲のブロックの同一シートでの重なりや、別シートでの選択セル範囲まで考慮はしてませんが。 Sub Sample2() Dim i As Long, cntRow As Long, cntCol As Long With Selection For i = 1 To .Areas.Count MsgBox .Areas(i)(1).Address cntRow = .Areas(i).Rows.Count cntCol = .Areas(i).Columns.Count MsgBox "行 : " & cntRow & vbCrLf & "列 : " & cntCol Next i End With End Sub を実行して使えるかどうか考えてみてください。 例えばCTRLキーを押しながらマウスをドラグして、3ブロックのセル範囲を指定しておいて、上記コードを実行する。(テスト済み) 各ブロックの左上隅のセル番地と範囲の行数、列数を示します。 これを(同一ブックがよいだろうが)使わないシートに記録して、情報を次回に残すとかする。 このブックを開いたとき、このシートを見て再現が可能ではないですか。
お礼
ありがとうございます。問題無く出来ました。