Excel VBAで選択されたセルの範囲を別のセルに書き込む方法

このQ&Aのポイント
  • Excel VBAを使用して、選択されたセルの範囲(単一セルまたは複数セル)を別のセルに書き込む方法について教えてください。
  • また、ブックを閉じる際に、選択されたセルの範囲を指定したシートの指定セルに書き込み、ブックを開く際に指定したシートの指定セルの値に応じてセル範囲を選択する方法も知りたいです。
  • どなたか、Excel VBAに詳しい方、ご教示いただけませんか?よろしくお願いします。
回答を見る
  • ベストアンサー

excel vba 選択されたセルの範囲を別のセル

excel vba 選択されたセルの範囲を別のセルに書き込みたい。 お世話になっております。 乱筆乱文お許し下さい。 EXCEL VBAについてですが、或るブックを閉じる時(Private Sub Workbook_BeforeClose(Cancel As Boolean))にその時点でACTIVEなsheetの名前を指定シートの指定セルに書き込み、そのブックを開く時(Private Sub Workbook_Open())に指定シートの指定セルの値の名前sheetをACTIVEにすることは出来たのですが、もう一歩進んで、 ブックを閉じる時(Private Sub Workbook_BeforeClose(Cancel As Boolean))にその時点でselectされているcellの範囲(単一セル・複数セル共に、名前がついていたら名前、ついていなければrangeを表す文字列)を指定シートの指定セルに書き込み、そのブックを開く時(Private Sub Workbook_Open())に指定シートの指定セルの値の名前cell範囲をselectするようなことがやりたいのですが、私の検索の仕方が下手で、なかなか出てきません。どなたかご教示下さい。よろしくお願いします。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.3

問題はありません。 [A1]をWorksheets("作業用").Cells(3, 7)に置き換えればいいです。 やってみて、ダメだったら質問してください。 >検索の仕方が下手で、なかなか出てきません。 とあったので、検索の仕方を 「activecell 範囲の取得」 「vba 名前の取得」 をキーワードにすれば出てきます。

kichi4182
質問者

お礼

ありがとうございます。問題無く出来ました。

その他の回答 (2)

  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.2

書き込む指定セルが何処かわからないので、とりあえず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

kichi4182
質問者

補足

ありがとうございます。基本的な道筋は見えてきました。ただ、これはVBAを使う者には基本中の基本でしょうが、結果を書き込むセルをA1ではなく、「Worksheets("作業用").Cells(3, 7)」にしたい場合は[Worksheets("作業用").Cells(3, 7)]ではダメでしょうか?よろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

珍しいニーズの質問と思うので、 実際に活用したことがないのですが、思い付きです。 セル範囲のブロックの同一シートでの重なりや、別シートでの選択セル範囲まで考慮はしてませんが。 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ブロックのセル範囲を指定しておいて、上記コードを実行する。(テスト済み) 各ブロックの左上隅のセル番地と範囲の行数、列数を示します。 これを(同一ブックがよいだろうが)使わないシートに記録して、情報を次回に残すとかする。 このブックを開いたとき、このシートを見て再現が可能ではないですか。

関連するQ&A

  • VBAの「This Workbook」について

    VBAの「This Workbook」にコードを書くことについて教えて下さい。 ここにコードを書きと、例えばどんな便利な機能があるのでしょうか? よろしくお願いします。 私は下記の意味はだいだいわかります。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Private Sub Workbook_Open()

  • エクセルVBA 保護シート&フィルタ実行 全シート

    VBA超初心者です。 たくさんのシートのあるエクセルで、 シート保護後もフィルタを使用できるようにVBAを設定したいと思ってます。 (現在エクセル2000を使用してます) ネットで調べてVBAを設定してみました。 しかし下記のようにするとコンパイルエラーになってしまうのですが、 正しい方法を教えていただけると助かります。 Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean)   Application.CommandBars("Cell").Reset End Sub Private Sub Workbook_Open()   With Application.CommandBars("Cell").Controls.Add( _            Type:=msoControlButton, Before:=1, Temporary:=True)     .Caption = "AutoFilter"     .OnAction = "ThisWorkbook.filter"   End With   With Worksheets.Select     .Unprotect     .EnableAutoFilter = True     .Protect UserInterfaceOnly:=True   End With End Sub Private Sub filter()   On Error Resume Next   Selection.AutoFilter End Sub

  • 未入力セルとVBAについて

    エクセルのVBAについて教えて下さい。独学で調べたのですがわからず…お力をお借りしたいです。 未入力のセルがあった場合、入力しなければ保存できないマクロは知っているのですが、 では、それが結合セルであった場合はどの様になるのでしょうか?例えば、(A1~C1だったら) 又、複数の結合セルにその様な設定をしたい場合もどこに追加して行けばよいのでしょうか? 合わせて教えて頂けたら幸いです。 以下 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Sheets("sheet1").Range("A1") = "" Then MsgBox "必須項目セルが未入力です", 48, "入力エラー" Cancel = True Else ActiveWorkbook.Save End If End Sub

  • コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい

    コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい お世話になります。 上記の内容を実現したいのですが This Workbookには Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = False Sheets("Sheet3").Visible = False Sheets("Sheet1").Select ActiveWorkbook.Protect Password:="123" ActiveWorkbook.Save End Sub ――――――――――――――――――――――――――――――――――――――― Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="123" Sheets("Sheet2").Visible = True Sheets("Sheet3").Visible = True Sheets("Sheet2").Select Sheets("Sheet3").Select Sheets("Sheet1").Visible = False End Sub が入っていますがどのようにすればいいのでしょうか? ご教示お願いします。 ちなみにexcel2003です。

  • エクセルVBA ブックのクローズの記入の仕方

    エクセル2002を使用している初心者です。 エクセルを閉じる操作をしたときに、指定シートのあるセルをクリアして、 また別のシートについても、そのシート内のあるセルの文字を指定のセルにコピーしたいのです。(コピー先はセルの色を塗りつぶしたり、大きいフォントを使用しているので、その書式は変更せず、文字データだけをコピーしたいのです) このVBAの書き方を教えていただけないでしょうか。 VBAは書き込む場所はThisWorkbookですよね。 VBAの種類は、Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub ですよね。 すみません。この中に入れるコードがわからないのです。 クリアにするセルは、 シート名 利用券 の F15,F16,F17,Y16,AO16,AX16 です。 コピーするセルは、 シート名 施設 の セルG6 を セルC3 にコピーしたいのです。 (セルC3は、セルの色を塗りつぶしてあり、フォントも大きめを指定してあるので、その書式を活かしたままにしたいのです。また、セルC3は入力規則を設定していて、文字入力はできないようになっています。コピーはできましたけど・・・) いろいろ述べてすみません。 どうか教えてください。よろしくお願いいたします。

  • Excel全シートの指定オブジェクトを選択

    全てのシートに、「abc」という名前のオブジェクトが存在します。 ブックを閉じる際に、「abc」を全て非表示にしたいのですが、 全てのシートの「abc」を選択する、という構文がどうしてもわかりません。 ↓アクティブシートの「abc」を非表示にする。 Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveSheet.Shapes("abc").Visible = False End Sub ご教授お願い致します。

  • アプリケーションも閉じたいのですが

    ブック(ファイル)だけじゃなくて アプリケーションも閉じたいのですが Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Close SaveChanges:=True End Sub としたのですが、実際閉じるのはブックだけでアプリケーションは開いたままです。 「ウインドウを閉じる」を押して、ブックだけが閉じるのはわかるのですが 図のようにアプリケーション閉じるボタンを押してもウインドウ(ブック)しか閉じません。 Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Close SaveChanges:=True Application.Quit End Sub にしても結果は同じです。 しかし、Workbook_BeforeCloseイベントがないファイルなら、 アプリケーション閉じるボタンを押しても全て終了できます。 Workbook_BeforeCloseイベントを使っても アプリケーションも閉じる方法を教えてください。

  • エクセルVBAで、関数で使用されていない名前だけを削除したい

    Excel97,Windows98SEを使用しています。 セル範囲に名前をつけて、それを関数で引数として使っています。 よくシート削除などをするので、全く使わなくなった名前がたくさん出来てしまうのですが、 例えばブックを開いた時(Private Sub Workbook_Open()などで)に、ブック内でまったく使用されていない名前だけを削除する、というようなことはできますでしょうか? 色々考えてはみたのですが方法が思いつかず、質問させていただきました。 ご存知の方、どうぞよろしくお願いいたします。

  • エクセルの特定シートを完全に手動計算にする方法

    こんにちは。 エクセルのVBAについて最近勉強を始めた初心者です。 下記について知恵をお借りしたく、質問させて頂きます。 4つのシートで構成されているブックがあります。(他ブックとの連動はありません) シート1は集計表で、シート2~4はシート1の元データーが入っています。 本体はシート1のみ手動計算にしたいのですが、現状は以下の方法を取っています。 (1)ブックを開くと、ブック全体を手動計算にする (2)必要なタイミングで、シート1の特定セル範囲(3パターンあり)を再計算させるマクロを実行 (3)ブックを閉じると、自動計算に戻す こちらの方法でほぼ問題無いように思えたのですが、 ブックを閉じる時にエクセルの仕様で『'ファイル名.xls'への変更を保存しますか?』と聞かれますよね。 そこで"キャンセル"を選択すると、ブックは開いたまま自動計算モードに戻る=シート1が再計算されてしまうのです。 (このタイミングで(3)(Workbook_BeforeClose)のコードが走っているのだと思います) 先述の通り、本来手動計算にしたいのはシート1に限定されており、 シート2~4は自動計算で構いません。 やりたい事をまとめると、 ■ブックを開く  :シート1=手動計算、シート2~4=自動計算 ■ブックを閉じる:シート1=自動計算に戻す、ただしキャンセルした場合は手動計算モードを保持 現在のWorkbook_BeforeClose~の部分に何らかのコードを加えたら実現可能? とも思いますが、そこが分からず行き詰っています…。 上記実現するために良い方法がありましたら、ご教示お願いいたします。 【This Wook Book】に記述しているコード----------------------- Private Sub Workbook_Open() 'ブックを開くと手動計算にする Application.Calculation = xlCalculationManual End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) 'ブックを閉じると自動計算に戻す Application.Calculation = xlCalculationAutomatic End Sub -----------------------------------------------------

  • VBAでファイルを閉じる時に、他のエクセルファイルを閉じるには?

    VBAで、 Private Sub Workbook_Open() Workbooks.Open FileName:="バス時刻表.xls",ReadOnly:=True End Sub で、バス時刻表.xlsを自動的にオープンした後、 閉じる時に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) Workbooks("バス時刻表.xls").Close End Sub で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。

専門家に質問してみよう