- ベストアンサー
vlookでコメントの内容を取得する方法
- vlookを使用してA列の数字に対応したB列のコメントを取得する方法について調べています。
- マクロを使用して、「あああ.xls」の「マスター」シートの範囲A2:G4000からコメントの内容を結果表示する方法について考えています。
- 調査中にヒットしなかったため、こちらで質問させていただきました。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
コード全体の構造が判らないので、 Functionプロシージャにしてみました。 下記コードを本体のコードと同じモジュールに記述して、 本体のコードの Cells(C, 4).Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) としている部分を、 Cells(C, 4).Value = CVLookup(検索値, 範囲, 列番号, False) に変更すれば、ご要望のように動作するハズです。 '=================↓ ココカラ ↓================= Function CVLookup( _ ByVal keyVal As Variant, _ ByVal orgRng As Range, _ ByVal rstCln As Long, _ ByVal optFlg As Boolean _ ) As String Dim rstRwn As Long Dim keyRng As Range Set keyRng = orgRng.Columns(1) With WorksheetFunction rstRwn = .Match(keyVal, keyRng, optFlg) CVLookup = .Index(orgRng, rstRwn, rstCln).Comment.Text End With End Function '=================↑ ココマデ ↑================= 例えば、下記のテストコードは、 A1:C10の範囲について、E1セルの値をA列からを検索して、 その行のC列のコメントを取得し、F1セルにセットします。 Sub test() Range("F1").Value = CVLookup(Range("E1"), Range("A1:C10"), 3, False) End Sub ご参考まで。
その他の回答 (3)
- KURUMITO
- ベストアンサー率42% (1835/4283)
For C=XXX To XXXXXが有りませんね。 Cells(C,4)は具体的にはマスターシートになりますね。 マスターシートでそのセルは指定の範囲に入っていますがそれでよろしいのですね。
補足
For C = 14 To 27 があります。すみません。記入漏れです。 足りなすぎですね。申し訳ないです。 Cells(C,4)はあああxlsのマスターシートのセルになります。 ThisWorkbookは、あああxls とは、別のブックになります。
- imogasi
- ベストアンサー率27% (4737/17070)
コメントという言葉を不用意に使わないこと (1)一般的な用法で、何か注釈や意見を加えた文章 (2)EXCELの場合はセルの属性としてのコメント EXCELでも(1)の文章をセルの値として入力することは有るでしょう。だからややこしい。 ーー もし(2)なら、EXCELの関数に関する重大な認識不足です。EXCELの関数は、主に他「セルの値」を使ってセルの値を1つ決める(計算が多いが)するものです。コメントはセルの属性の1つで、セルの値(VALUE)とは別世界です。その片鱗は「形式を選択して貼り付け」のダイアロウグの「貼り付け」に列挙されている区分に見られます。セルの値と「表示形式などの書式」も世界が違います。 だからVLOOKUP関数などつけるはずがない。 もちろん別のセルの値としてセルの値になっておれば、検索の対象になりますが、2重化して持つことがあるかどうか。 >A列の数字に対応したB列についているコメント の対応したが、意味がはっきりしません。A列の数字に対応したコメントはそのセルに入っているのが普通ではないですか。飛び離れたセルに入っているはずは無いと思うが。 実例を挙げるとかして質問のこと。 質問の意味を推測で A列に入っているコメントを同行右のD列にテキストとして表示したいなら Sub test01() Workbooks.Open "01化.xls" '同一フォルダとする Set sh1 = Workbooks("01化.xls").Worksheets("Sheet1") sh1.Activate d = sh1.Range("a65536").End(xlUp).Row For Each cl In sh1.Range("a1:A" & d) MsgBox cl.Comment.Text sh1.Range("D" & cl.Row) = cl.Comment.Text Next End Sub
お礼
説明不足で済みません。 今後の質問の仕方にも参考にさせて頂きます。 ご回答の方も有難うございます。
- Sinogi
- ベストアンサー率27% (72/260)
コメントはセルの値じゃないのでVlookupでは取得できません 目的のセル番地を取得しCells(セル番地).Comment.Text で取得します。 Cells(C, 4).Value =Cells(セル番地).Comment.Text
お礼
ご回答有難うございます。 やはりできないのですね。 コメントをセルに書き込む仕様に変更します。。。
お礼
すごいすごいすごいです!!!!! できました。希望通りのものができました! 鼻息が荒くなりました。 ひとりで「すっげ~」とつぶやいてしまいました。 Functionプロシージャ、聞いた事もなく、 ”CVLookup”はググっても、1件しか出てこなかったです。(日本語サイト) どうにか勉強したいと思います! 有難うございました!!