Excel VBAでセルの隣を参照し別セルに代入する方法

このQ&Aのポイント
  • Excel2003版のVBAを使って、B55〜B63のセル内から「1」という数字があるセルを探し、そのセルの左側のセルの内容を別のセルに代入する方法について教えてください。
  • 具体的には、E17のセルにB55〜B63のセル内から「1」という数字があるセルの左側のセルの内容を代入したい場合、どのようにプログラムを組めばよいですか?
  • 初心者ですが、ご教授ください。
回答を見る
  • ベストアンサー

Excel VBA セルの隣を参照し別セルに 代入

Excel2003版でVBAを使い  検索と参照プログラムを組みたい ----------------------------------------- Sub Sample1() Dim FoundCell As Range Set FoundCell = Range("B55:B63").Find("1") If Not FoundCell Is Nothing Then MsgBox FoundCell.Offset(0, -1) End If End Sub ------------------------------------------- ↑VBAプログラム参照↑ ・B55~B63セル内の中から(1)の 数字があるセルを探し更に検索してヒット したセルの左セルの内容を メッセージボックスに表示させると ゆうやり方です。 この内容を あるセル 例えば"E17"セルに代入させたい場合 やりたいこととしまして、 ○----------------------------------------------------------○ E17セルの内容を空白にした後 Calculateを使い ランダムシャッフルし、 B55~B63セル内の中から(1)の 数字があるセルを探し更に検索してヒット したセルの左セルの内容をE17に入力(代入又は参照でも可)させたい ○---------------------------------------------------------○ 場合はどのようにプログラムを組めばよろしいですか? 無知で愚かな私ですが 恥を忍んでご教授頂けませんか よろしくお願いします(人>д<*ペコ謝)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

FoundCellという変数に「見つかったセル」が入る,というリクツさえ理解すればあとはカンタンです。 ヤリタイ事の要件: 1.目的のセル範囲に探したいものがあったら確保する 2.そのセルの左隣のセルの内容を持って行きたいセルに転記・コピー・参照させる 2’無かった時は終了する sub macro1()  dim FoundCell as range  set foundcell = range("B55:B63").find(what:=1, lookin:=xlvalues, lookat:=xlwhole)  if foundcell is nothing then exit sub  range("E17") = foundcell.offset(0, -1).value end sub

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

> Calculateを使い > ランダムシャッフルし、 ここの意味が分かりませんが > セルの左セルの内容をE17に入力 は Range("E17")=FoundCell.Offset(0, -1) でいかがですか。代入になります。 空白は Range("E17")="" です。 セルに関数でしたら E17に =IF(ISNA(OFFSET(B55,MATCH(1,B55:B63,0)-1,-1)),"",OFFSET(B55,MATCH(1,B55:B63,0)-1,-1)) で参照になります。

ayabie3579jp
質問者

お礼

返事が遅れてしまい申し訳ございませんでした。 とても参考になりまた一つ分からないことに納得 フムフム(*゜Д゜)φ))ナルホド できました。 丁寧かつ親切で助かりました。 どうも有り難うございました(>_<)↓ペコリ

関連するQ&A

  • Excel VBA テキストボックスを検索

    テキストボックス3に数値を入力し ExcelのA列にあるか検索をかける。 ある場合は、B列の同じ行に 「みーつけた!」と入力。 その設定で組んでみたのですが、 テキストボックス3にデータを6桁入力しようとすると 6桁目にオーバーフローエラーが出ます。 このプログラムの何処がおかしいのでしょうか? Private Sub TextBox3_Change() Dim Number As Integer If TextBox3.Value <> "" Then '空じゃない場合 Number = TextBox3.Value Call 検索(Number) MsgBox TextBox3.Value End If End Sub Sub 検索(ByVal Number As Variant) Dim FoundCell As Range Set FoundCell = Range("A:A").Cells.Find(What:=Number, lookat:=xlPart) If FoundCell Is Nothing Then Else FoundCell.Activate Range("O" & ActiveCell.Row).Value = "みーつけた!" End If End Sub

  • Excelで入力したセルの隣のセルに累計の表示を

    無理難題を押し付けられて困っています。 画像のように、セルB3に入力し、その累計を隣のセルC3に表示させたいのです。 以下、B4~B6も同じです。 同様のことをD⇔E、F⇔G、H⇔I、J⇔K・・・・でも行いたいのです。 ここの質問欄を検索し、以下のVBAを見つけました Const inpColumn = "C" '入力する列名が『A』列の場合 Private Sub Worksheet_Change(ByVal Target As Excel.Range) With Target '単一セルに入力した場合 If .Count = 1 Then '入力する列名に入力した場合 If .Column = Range(inpColumn & "1").Column Then '入力が数値の場合 If IsNumeric(.Value) Then '隣の列『B列』の値に入力した値を加える '(Offsetの2番目の1が1つ右のB列を示す) .Offset(0, 1) = .Offset(0, 1) + .Value End If End If End If End With End Sub これを実行したところ、B⇔Cだけが実行され、他の列では駄目でした。 VBAに無知なもので、どこを直せばよいのか全く分かりません。 また、他の方法があるのかも分かりません。 説明不足かも知れませんが、よろしくお願いいたします。

  • Excel VBA セルの双方向同期のエラーについ

    エラーが発生して理由がわからないので、どなたか助言をお願いします。 以下のVBAにて、目的のセルにデータを入力すると、1回目は必ず添付写真の通りのエラーが出まして、デバッグをすると3行目が黄色でハイライトされます。 記述は以下の通りです。どうぞよろしくお願いします。 シートAへのVBA設定 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Sheets("シートB").Range("$B$1").Value = Sheets("シートA").Range("$A$1").Value End If End Sub シートBへのVBA設定 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Then Sheets("シートA").Range("$A$1").Value = Sheets("シートB").Range("$B$1").Value End If End Sub

  • VBAでセル記入禁止

    たとえば、"A1"に1を記入した場合、B1を記入不可にできるような、VBAのコードがあれば教えて欲しいです。 sub 記入不可() if range("A1").value = "A1" then B1のセルが記入できないコード end if end sub です。 よろしくお願い致します。

  • VBA 特定もセルに入力で実行

    下記のコードを実行した際は問題なく実行されるのですが これを特定のセルに値が入力された際に動かそうとするとエラーになってしまいます。 Sub PaintTargetCharacter() Dim FoundCell As Range, FoundCell2 As Range Dim Addr As String Dim Addr2 As String Dim SearchArea As Range Dim SearchArea2 As Range Application.ScreenUpdating = False ActiveCell.Interior.ColorIndex = 0 '検索対象範囲 Set SearchArea = Worksheets("G番情報").Range("AE6:BG6") '検索実行 Set FoundCell = SearchArea.Find(What:=ActiveCell.Offset(0, -1), LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列を含むセルがない場合は終了 If FoundCell Is Nothing Then Exit Sub Set SearchArea2 = Range(FoundCell.Offset(1, 0), FoundCell.Offset(33, 0)) Set FoundCell2 = SearchArea2.Find(What:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) If FoundCell2 Is Nothing Then Exit Sub FoundCell2.Copy Destination:=ActiveCell Application.ScreenUpdating = True End Sub 当然、特定のセルで値を入力後エンターキーを押すとアクティブセルは下に下がってしまうので Private Sub Worksheet_Change(ByVal Target As Excel.Range) Target.select Call PaintTargetCharacter End Sub としているのですが Set FoundCell = SearchArea.Find(What:=ActiveCell.Offset(0, -1), LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) の部分でエラーが起きてしまいます。 また停止してシートに戻るとセルのカーソル表示が消えてしまいます。 この現象はシートを閉じて再度開くと直りますが なにかエラーと関係しているのでしょうか? 初心者なのでおかしな部分が多々あると思います。 ご指摘などあれば宜しくお願いします。

  • excelのセル参照

    vba初心者です。 excelのvbaでセル範囲(rangeなど)を指定して数値の入力や参照をしますが vbaを使わずに元のワークシート側で行・列の挿入、削除した場合 vbaにはその分反映されません。(当然ですが) Range("C3:D4")の場合、B列に列を挿入したらRange("D3:E4") となるような。 vbaの修正を最小限に抑える簡単で良い方法はありますか。

  • Excel VBA教えてください

    Excel シート1のA2~E2に数字を入力します A4~E4に A2*10・B2*10・・・と A5~E5に A2*15・B2*15・・・と計算式がはいっています A4~E4の結果とA5~E5の結果をA10~E10以降に代入します ただA2~E2の数字は毎回変わるので履歴を残したいです 下記のプログラム何処を直せばよいですか? Private Sub CommandButton1_Click() Dim LastR As Long LastR = Range("A65536").End(xlUp).Row + 1 If LastR < 10 Then LastR = 10 Range(Cells(LastR, "A"), Cells(LastR, "E")).Value = Range("A4:E5").Value End Sub

  • Excel VBA セルの内容をTextBoxに

    ExcelのVBAで質問があります。 複数のシートの表に入力した値の合計を出したいのですが、 その後の処理もあり、ユーザーフォームのテキストボックスに反映させたいと考えています。 Windows7のExcel2010で作っています。 試しにセルB1の値が変わった時、 テキストボックスに反映させるつもりで作ったコードは以下の通りですが、 上手くいきません。 Sub Z_test() UserForm2.Show vbModeless End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "B1" Then UserForm2.TextBox1.Value = Range("B1").Value '←※ End If End Sub ※の行には他にも UserForm2.Controls("TextBox1").Value = Range("B1").Value と調べたコードを試してみたのですが、 セルの内容が全く反映されません。 セルB1には数式の「=SUM(C2:C1000)」 が入っており、表のC列に入力された値の合計を求めています。 どなたかお知恵を拝借できれば大変助かります。 宜しくお願い致します。 長文失礼しました。

  • Excel VBA セル値の配列代入について

    Excel VBAで、セルの値を配列に代入する処理を、よくやります。 arr=Range("$A1:$C1000").value とかですね。これに関して、オートフィルタで絞り込んだ結果の可視セルだけを、配列に代入するということは、やっぱり出来ないのでしょうか。

  • 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. 何かこのシートマクロ(私が勝手に呼んでいる名称)の参考サイト、書物がありましたらご紹介下さい。 宜しくお願い致します。

専門家に質問してみよう