エクセルVBAで結合しているセルの値を表示する方法

このQ&Aのポイント
  • エクセルVBAを使用して、結合しているセルの値を特定のセルに表示する方法について説明します。
  • 結合されたセルが含まれる行のすべてのセルの値をB5セルに表示するために、Worksheet_SelectionChangeイベントを使用します。
  • ただし、1行目のセルが結合されている場合、B5セルに値が表示されない問題が生じます。
回答を見る
  • ベストアンサー

エクセルVBAについて

エクセルVBAについて 下にある、1行目に入力された数値の、選択したセルの数値を、B5セルに表示させるマクロなのですが、1行目が結合していると、うまくB5セルに表示できません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Target.Count > 1 Then Exit Sub    '●複数セル選択は無視  If Target.Row <> 1 Then Exit Sub    '●1行目以外の選択は無視  If Target.Column > 6 Then Exit Sub   '●F列目以降の選択は無視  If Target.Value = "" Then Exit Sub   '●選択セルが未入力なら無視    Range("B5").Value = Target.Value End Sub このマクロで、結合しているセルをB5に表示させることはできますでしょうか? 1行目で選択するセルは、すべて2つのセルが結合しています。 よろしくお願いいたします。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

一行目のセル結合状態(2つのセルの結合、3つのセルの結合、、 あるいはそれらが混在している)がわかると も少しくっきりしたコードになりますが、一応以下のように。。 '------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells(1).Row <> 1 Then Exit Sub '▼▼1行目以外の選択は無視 If Target.Cells(1).Value = "" Then Exit Sub '▼▼▼選択セルが未入力なら無視 Range("B5").Value = Target.Value End Sub '----------------------------------------- 以上です。

ein-zwei
質問者

お礼

おおっできました! 「複数選択を無視」の部分がなければよかったんですね。 度々のご回答をありがとうございました。

関連するQ&A

  • エクセルVBAについて

    エクセルVBAについて 下ような、最初に選択したセルに、次に選択したセルをコピーするマクロを使用しています。 Dim Frstcell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 1 Then Exit Sub On Error Resume Next 'エラーを無視 If Target.Column >= 5 And Target.Column <= 35 Then 'E:AIコピー先 Set Frstcell = Target.Cells(1) ElseIf Target.Column >= 45 And Target.Column <= 46 Then 'AS:ATコピー元 If Target.Cells(1).Value = "" Then Exit Sub Target.Copy Frstcell.MergeArea End If On Error GoTo 0 'エラートラップ終了 End Sub この場合、コピー元の枠線の書式も、コピー先にコピーされてしまうのですが、 書式なしでコピーするにはどうしたらよいでしょうか? よい方法がありましたら、よろしくお願いいたします。

  • エクセルVBA/Intersect(Target,~について

    ワークシート上の名前を定義された特定の個所(結合セル)を選択すると、その部分が黄色く変わるマクロです。 一応、動くのですが、例えば印刷範囲を選択などしてしまうと印刷範囲すべてが黄色くなってしまいます。 If Target.Count >1 then Exit Sub だと、結合セルに名前を定義しているので、一ヶ所だけ選択しても色が変わらなくなります。    If Selection.Areas.Count >1 then Exit Sub だと、一遍に連続した範囲を選択してもAreasは1ですからだめです。    Range( "会社名,日付,物件,電話番号,売上高,店名,担当者")の6つの名前を定義された結合セル範囲のなかのどれか一ヶ所だけが選択された場合のみ作動するようにするにはどう書けばよいのでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set Rng = Range( "会社名,日付,物件,電話番号,売上高,店名,担当者") If Intersect(Target, Rng) Is Nothing Then Exit Sub Rng.Interior.ColorIndex = 2 Selection.Interior.ColorIndex = 6 End Sub

  • Excel 2000です。VBAを改造していただきたいのですが

    入荷品のチェックシートです。B列に受領数を入力するとA列に年月日が記録されるVBAを作っていただき必要なブックのシートごとにコピーして使っていました。全品入荷完了後 別のロットにシートタブの名目を書き換えて再利用します。  ('複数セルが選択された場合、動作をキャンセル  がなぜ必要かも理解できないVBAの勉強を挫折の高齢者です) B列のセル一個づつ選択削除でないとB列が空白になるだけでA列には日付が残ります。複数のセル選択で一気に日付を削除したいのです。 お助けください。 Private Sub Worksheet_Change(ByVal Target As Range) '複数セルが選択された場合、動作をキャンセル If Target.Count <> 1 Then Exit Sub If Intersect(Target, Range("B5:B1000")) Is Nothing Then Exit Sub 'B5:B1000"の範囲外は除外 Application.EnableEvents = False If Target.Value <> "" Then If IsDate(Target.Offset(, -1).Value) Then GoTo EXIT_LABEL '日付が記入済の場合は実行しない Target.Offset(, -1).Value = Format$(Now, "mm/dd hh:mm") Else 'セルを空白にした場合、日付を削除 Target.Offset(, -1).Value = "" End If EXIT_LABEL: Application.EnableEvents = True End Sub

  • ExcelのVBAにて収支を出すプログラム

    マクロで収支を出すプログラムを組みたいのですが、具体的には C2:今回の収支 → B7に反映される。 C7:前回の収支 D7:トータル収支 で、今回の収支を入力したらが更新されるプログラムなんですが。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) <> "C2" Then Exit Sub If Not IsNumeric(Target.Value) Then Exit Sub Range("C7").Value = Range("D7").Value Range("D7").Value = Target.Value + Range("C7").Value End Sub の、プログラムだと特定のセルだけになってしまいます。これにさらに人を認識して更新するプログラムを組みたいのですが上手くいきません。 画像を添付しますが、Aさんの場合は、Aさんの収支に反映される。Bさんの場合はBさんの収支に反映される感じで作りたいです。 ちなみに人はプルダウンで変更できるようにしてあります。 どなたか分かる方がいらっしゃいましたら、ご教授をお願いいたします。

  • EXCEL VBA の シートマクロ? について

    C-Builderでは中級程度のプログラムを作成し、通常のEXCEL VBAは使いこなしている者です。 数種のエクセルマクロの本を読んだり、ネットで検索しても(名称を知らないのでヒットしないのかも知れませんが)出ていない様なので宜しくお願い致します。 質問内容: 1. EXCELのシートの下方のシート選択タブでコードの選択を選んだ時に出てくるVBA部分の正式名称は何でしょうか?ツールから選択するVBAマクロと区別する名称はあるのでしょうか。 2. ある時、たまたまヒットしたサイトの内容を参考に作成したプログラムです。セルに数値を入力すると文字を表示する様にしています。しかし、これでは総てのセルに対応してしまいます。参考にしたプログラムでは with tergetの前に何か範囲指定コマンドの様なものが書かれていた気がしますが、そのプログラムを消してしまった様で分かりません。A列とかB列のセルに対してのみ変換を行いたいのです。 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ErrorLine With Target If .Value = "" Then Exit Sub If .Value = "0" Then .Value = "A" If .Value = "1" Then .Value = "B" If .Value = "2" Then .Value = "C" If .Value = "3" Then .Value = "D" If .Value > "4" Then Exit Sub End With ErrorLine: End Sub 3. 何かこのシートマクロ(私が勝手に呼んでいる名称)の参考サイト、書物がありましたらご紹介下さい。 宜しくお願い致します。

  • エクセルVBAについて

    http://okwave.jp/qa/q7236213.html 上記質問の発展形なのですが 同様のことを E列に日付 F列に売上 G列に結果 でやりたいのですが この時A列~C列のマクロも残したままでしたいのですが 下記のように同様のプロシージャーを下段に書けばできると思ったのですが うまくいきません。 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$A$1" Then Exit Sub If Target = "" Then Exit Sub Range("C10:C65536").ClearContents With Range(Cells(9 + Range("A1").Value, "C"), Cells(Range("A65536").End(xlUp).Row, "C")) .FormulaR1C1 = "=MAX(RC2:R[" & -Range("A1").Value + 1 & "]C2,FALSE)" .Value = .Value End With End Sub Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$E$1" Then Exit Sub If Target = "" Then Exit Sub Range("G10:G65536").ClearContents With Range(Cells(9 + Range("E1").Value, "G"), Cells(Range("E65536").End(xlUp).Row, "G")) .FormulaR1C1 = "=MAX(RC6:R[" & -Range("A1").Value + 1 & "]C6,FALSE)" .Value = .Value End With End Sub どなたかお知恵を拝借できませんでしょうか?

  • エクセルVBAについて

    エクセルVBAについて range("B5") = 1行の、選択したセルの値 というようなマクロを作成したいと思っています。 というのも、B5セルの値が、1行で選択したセルの値に変化できればと思っています。 ちなみに下のようなコードを書いてみたのですが、うまくいきません orz Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range("B5") = Rows(1).ActiveCell.Value End Sub 初心者で申し訳ありませんが、よい方法がありましたら、 よろしくお願いいたします。

  • エクセル 加算 

    1つのセルに数字を入力すると加算されているマクロを探していたら 以下の回答がありました Dim memo Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value <> "**" And IsNumeric(Target.Value) = False Then Exit Sub Application.EnableEvents = False If Target.Value = "**" Then memo = 0 Else memo = memo + Target.Value End If Target.Value = memo Application.EnableEvents = True End Sub このマクロですがA1に入力した場合に適用しますが、このマクロをたとえばA1からC1の範囲で使用した1場合にどのようなマクロをすればよいかわかりません それか、このマクロではそのようなことができるのかもわかりませんので教えて頂けないでしょうか

  • エクセルのVBAについて教えてください。

    エクセルのVBAについて教えてください。 下記のような構文で、Dの行にAやBの文字が入力された時、その都度 セルの色が変わるようにはできたのですが、本当は、「C5」セルに文字が 入力された時、「C5」だけでなく「B5:J5」の範囲でセルの色を変えたい のですが、どうすれば良いのでしょうか。 ご存知の方是非教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myColor As Integer If Target.Count > 1 Then Exit Sub If Target.Column <>4 Then Exit Sub Select Case Target.Value Case "A" myColor = 34 '水色 Case "B" myColor = 40 '肌色 Case Else myColor = xlNone End Select Target.Interior.ColorIndex = myColor End Sub

  • エクセルマクロvbのchangeイベントで複数入力した時フリーズして困っています

    マクロ初心者で困っています。 セルに『新規』と入力すると、T2セルに『F』と表示されるようにしたのですが、 『新規』をコピーして複数セルに貼り付けると貼り付けた状態のままパソコンが動かなくなってしまいます。 複数のセルがchangeした場合、マクロを終了する方法はないでしょうか? 教えて下さいm(_ _)m Private Sub Worksheet_Change(ByVal Target As Range) Dim tr As Integer Dim x As String If Intersect(Target, Range("H4:H253")) Is Nothing Then Exit Sub x = Target.Value tr = Target.Row If x = "" Then Exit Sub If x = "新規" Then Range("T2") = "F"   End sub

専門家に質問してみよう