[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『sheet1の全セルを検索して、なんらかの文字があった場合、sheet2にその文字があるかを検索し、もし一致した場合のみ、sheet2のその文字の右隣にセルにある数値を、sheet1のその文字の右隣のセルに表示させたい』(ゆうすけ)
大変分かりにくくて申し訳ございません。
簡単な例で申しますと
sheet1にはランダムでいろいろなセルの位置に、名前が書き込まれています。
sheet2のA列に名前の一覧があり、B列にはその人の年齢の一覧が書かれています。
sheet1に書かれている全ての名前のすぐ右のセルに、sheet2に書かれた年齢を表示させたいのです。VBAを使うかと思われますが、全くの初心者ですので、詳しくお教えいただけると幸せです。
お手数かけますが、ご指導よろしくお願い致します。
>ランダムでいろいろなセルの位置に、名前が書き込まれています と書かれていて、 >名前のすぐ右のセルに、sheet2に書かれた年齢を表示 とあります。 それって、おかしくないでしょうか?
ランダムで色々な位置だったら、すぐ右のセルに名前が入っている可能性もあることになってしまいます。 その場合はどうするのでしょうか?
いろいろではなく、少なくてもSheet1名前のすぐ右は、空白とか法則があるのではないでしょうか? 具体的な説明が必要かと思いますよ。
1or8
ゆうすけ
VLOOKUP関数で可能かと思いますよ 1or8
ゆうすけ
具体的な説明(表)がないので、細かく説明できませんが、↓をご参考に 1or8 https://www.excel.studio-kazu.jp/mag2/backnumber/mm20040921.html
Sheet2のA列に名前、B列に年齢の場合 Sheet1の名前(例ではA1)がある右のセルに =VLOOKUP(A1,Sheet2!A10:B10,2) 範囲は適当です。
1or8
コメント本当にありがとうございます。
その方法ですと、一つ一つ地道に数値を表示させていく感じですか??
私としては、できる限り高速に表示させたいのですが、方法はありますでしょうか!??
ゆうすけ
横から失礼します 1or8さんの回答ですと最初から作成する場合なら問題ないと 思われますが、質問者さんの質問内容から推測すると sheet1のレイアウトは出来上がっている様子です。 そこへsheet2から引っ張るのならVLOOKUPはちょいと難しいんでは・・・ 的外れでしたらゴメンなさい。 (とおりすがり)
sheet1もsheet2もレイアウトは出来上がっております。
A列に書かれている名前の数も100を超えるので、できれば一括で表示させる手段をお教えいただきたいです。
☆衝突
ですから、詳しく分からないので… 数式で大変かはこちらでは判断できません。 マクロでも詳細が分からなければ、無駄に処理時間のかかるマクロが出来上がってしまいます。
他の質問を参考に表レイアウトを載せて説明してください。
1or8
このレイアウトでご指導お願い致します。
【sheet1】
A B C D E 1 鈴木
2高橋
3
4 山田
5 小林
【sheet2】
A B
1 山田 23
2 鈴木 35
3 高橋 73
4 小林 100
てはじめに…
こんなんでどうでしょうか?
Sub macro()
Dim r As Range, rr As Range
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
For Each r In ws1.Range("A1:E100")
If r.Value <> "" Then
If Application.WorksheetFunction.IsText(r.Value) = True Then
For Each rr In ws2.Range("A1", ws2.Range("A1").End(xlDown))
If rr.Value = r.Value Then
r.Offset(0, 1).Value = rr.Offset(0, 1).Value
Exit For
End If
Next
End If
End If
Next
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
1or8
完璧です・・・・。本当にびっくりしてます・・・。お礼の言葉も見つかりません・・・。
しつこくて申し訳ありませんが、
If r.Value <> "" Then
If Application.WorksheetFunction.IsText(r.Value) = True Then 'セルが文字列かどうか判断。文字列の時にFor each 〜 Nextの処理に進む。
For Each rr In ws2.Range("A1", ws2.Range("A1").End(xlDown)) 'A1セルから、shift+ctrl+↓の範囲のセルを上から1個ずつ処理対象とし…
If rr.Value = r.Value Then 'Sheet2の名前リストとSheet1の名前が一致したら、下に進む。A1セルから、shift+ctrl+↓の範囲で繰り返し確認。
r.Offset(0, 1).Value = rr.Offset(0, 1).Value 'ここで、右セルに年齢を入力
Exit For
End If
Next
End If
End If
の意味の詳細をお教えいただけませんか。
また、名前の下のセルに表示させるには、どこをいじればよろしいのでしょうか???
お手数かけます。ありがとうございました。
ゆうすけ
>意味の詳細 コードに説明を入れました。
>前の下のセルに表示させる r.Offset(0, 1).Value (0, 1)→(下へのオフセット量, 右へのオフセット量)となります。 したがって、r.Offset(1, 0).Value となります。
本当は突っ込みどころ、満載のコードです。 てはじめなので、動けばいいかなと…
1or8
ほんとにお世話になりました。(最後の質問です><)
If r.Value <> "" Thenの部分の<> "" は何を表しているのですか??
※自分も1or8さんのように瞬時にマクロを組めるように今からしっかり勉強始めます。
ほんとにお世話になりました。
<>:等しくないを表します。 つまり、今回の場合、空白ではない時、Tureとなります。 1or8
ありがとうございました。
最後まで親切にしてくださり感無量です。
また、ご指導よろしくお願い致します。
ゆうすけ
すみません!!!追伸です!!!
もし、sheet1に書かれている名前がテキストボックス内に書かれていた場合に、まとめてその直近のセル内に書き換えることは可能ですか????
例えば、sheet1において、テキストボックス内に「鈴木」と書かれているものを直近のセルE1内に移し変え、「山田」と書かれているものをセルD4内に移し変える。といった具合です。
何度も申し訳ございませんが、ご指導お願い致します!!!!!
もちろんご存知かとは思いますが、テキストボックスとは、好きな場所に文字を書くときに使うツールです。
↓新たに質問された様です。 [[20091112114406]]『テキストボックスに書かれている文字を直近のセル内に移し変える(Excel2003)』(ゆうすけ)
(HANA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.