Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3658 / 13644 ツリー ←次へ | 前へ→

【60857】検索値をセル内最初の2文字に指定して、検索結果を出す場合は? うしねこ 09/3/18(水) 14:12 質問[未読]
【60859】Re:検索値をセル内最初の2文字に指定して... Jaka 09/3/18(水) 15:42 発言[未読]
【60860】Re:検索値をセル内最初の2文字に指定して... うしねこ 09/3/18(水) 16:03 発言[未読]
【60861】Re:検索値をセル内最初の2文字に指定して... Jaka 09/3/18(水) 16:16 発言[未読]
【60862】Re:検索値をセル内最初の2文字に指定して... うしねこ 09/3/18(水) 16:48 発言[未読]
【60863】Re:検索値をセル内最初の2文字に指定して... Jaka 09/3/18(水) 17:09 発言[未読]
【60864】Re:検索値をセル内最初の2文字に指定して... うしねこ 09/3/18(水) 18:01 発言[未読]
【60873】Re:検索値をセル内最初の2文字に指定して... Jaka 09/3/19(木) 12:49 発言[未読]
【60877】Re:検索値をセル内最初の2文字に指定して... うしねこ 09/3/19(木) 15:18 質問[未読]
【60878】Re:検索値をセル内最初の2文字に指定して... Jaka 09/3/19(木) 16:48 発言[未読]
【60879】Re:検索値をセル内最初の2文字に指定して... Jaka 09/3/19(木) 17:00 発言[未読]
【60880】Re:検索値をセル内最初の2文字に指定して... うしねこ 09/3/19(木) 17:25 お礼[未読]

【60857】検索値をセル内最初の2文字に指定して、...
質問  うしねこ E-MAIL  - 09/3/18(水) 14:12 -

引用なし
パスワード
   検索値をセル内最初の2文字に指定して、検索結果を表示させるために、VLOOKUPとLEFTを使って、下記のように作成したところ、エラーが出ます。

Dim gyoy As Integer
Dim ii As Interger

Sheets("LIST").Select
gyoy = 10
Sheets("LIST").Select
Do Until Worksheets("LIST").Range("e" & gyoy).Text = ""
     gyoy = gyoy + 1
Loop
Sheets("LIST").Select
ii = 10
For ii = 10 To gyoy -1
  If Worksheets("LIST").Range("e" & ii).Text <> "" Then
Worksheets("LIST").Range("b" & ii).Value ="= VLOOKUP(LEFT($e" & ii & ", 2) " & ii & ",CODE,3,FALSE)"

VLOOKUPから先の式がおかしいのか、Valueでやるのがおかしいのか、いろいろ
試してみましたが、うまくいきません。
ちなみに、セル内最初の2文字に限定せず、セルそのものを検索値にした下の式はうまくいきます。
Worksheets("LIST").Range("c" & ii).Value ="=VLOOKUP($d" & ii & ", CODE2,2,FALSE)"

どうぞ宜しくお願いします。

【60859】Re:検索値をセル内最初の2文字に指定し...
発言  Jaka  - 09/3/18(水) 15:42 -

引用なし
パスワード
   矢印の位置が合わなかったので2度目。

▼うしねこ さん:
>Worksheets("LIST").Range("b" & ii).Value =
   "= VLOOKUP(LEFT($e" & ii & ", 2) " & ii & ",CODE,3,FALSE)"
                           ↑
                 意味が解りません。
                 Code関数の使い方をヘルプでよく読んでください。

>ちなみに、セル内最初の2文字に限定せず、セルそのものを検索値にした下の式はうまくいきます。
>Worksheets("LIST").Range("c" & ii).Value ="=VLOOKUP($d" & ii & ", CODE2,2,FALSE)"
うまくいくと思えないです。

【60860】Re:検索値をセル内最初の2文字に指定し...
発言  うしねこ E-MAIL  - 09/3/18(水) 16:03 -

引用なし
パスワード
   ▼Jaka さん:
>矢印の位置が合わなかったので2度目。
>
>▼うしねこ さん:
>>Worksheets("LIST").Range("b" & ii).Value =
>   "= VLOOKUP(LEFT($e" & ii & ", 2) " & ii & ",CODE,3,FALSE)"
>                           ↑
>                 意味が解りません。
>                 Code関数の使い方をヘルプでよく読んでください。
>
>>ちなみに、セル内最初の2文字に限定せず、セルそのものを検索値にした下の式はうまくいきます。
>>Worksheets("LIST").Range("c" & ii).Value ="=VLOOKUP($d" & ii & ", CODE2,2,FALSE)"
>うまくいくと思えないです。


▼Jaka さん:
レスいただきましてありがとうございます。
ご指摘のCODEはCode関数ではなく、VLOOKUPで参照するリストをCODEと定義づけしたものです。紛らわしくて申し訳ございませんでしたが、どうぞ宜しくお願いします。

【60861】Re:検索値をセル内最初の2文字に指定し...
発言  Jaka  - 09/3/18(水) 16:16 -

引用なし
パスワード
   >レスいただきましてありがとうございます。
>ご指摘のCODEはCode関数ではなく、VLOOKUPで参照するリストをCODEと定義づけしたものです。紛らわしくて申し訳ございませんでしたが、どうぞ宜しくお願いします。
だったら、なおさら悪いですね。
codeって関数がすであるもの...。
変えたら。

【60862】Re:検索値をセル内最初の2文字に指定し...
発言  うしねこ E-MAIL  - 09/3/18(水) 16:48 -

引用なし
パスワード
   ▼Jaka さん:
>>レスいただきましてありがとうございます。
>>ご指摘のCODEはCode関数ではなく、VLOOKUPで参照するリストをCODEと定義づけしたものです。紛らわしくて申し訳ございませんでしたが、どうぞ宜しくお願いします。
>だったら、なおさら悪いですね。
>codeって関数がすであるもの...。
>変えたら。

おっしゃる通り、名称を変えます。
尚、iiやgyoyについては、式を入れるのが一つのセルだけではなく、検索対象のデータが存在するもの全てに入れるために、Do Loopを使うための便宜です。
他にもっと有効な方法があれば教えていただきたいのですが。

【60863】Re:検索値をセル内最初の2文字に指定し...
発言  Jaka  - 09/3/18(水) 17:09 -

引用なし
パスワード
   >Do Until Worksheets("LIST").Range("e" & gyoy).Text = ""
>     gyoy = gyoy + 1
>Loop

   ↓これですみそうですね。(数式が入っているのでなければ。)

gyoy = Worksheets("LIST").Range("e" & rows.count).End(xlup).row

【60864】Re:検索値をセル内最初の2文字に指定し...
発言  うしねこ E-MAIL  - 09/3/18(水) 18:01 -

引用なし
パスワード
   ▼Jaka さん:
>>Do Until Worksheets("LIST").Range("e" & gyoy).Text = ""
>>     gyoy = gyoy + 1
>>Loop
>
>   ↓これですみそうですね。(数式が入っているのでなければ。)
>
>gyoy = Worksheets("LIST").Range("e" & rows.count).End(xlup).row

Do Loopの件、簡略な式を教えていただきましてありがとうございました。
このLoopの処理の後、VLOOKUPを使って検索値から検索結果を出す式を出すにはどうすればよいでしょうか?

検索値"c": セル"d"を参照して同ファイル内の別シートリストから、検索結果を表示
検索値"b": セル"e"の最初の2文字を参照して同じく検索結果を表示

何度もお手数をお掛けしますが、宜しくお願いします。

【60873】Re:検索値をセル内最初の2文字に指定し...
発言  Jaka  - 09/3/19(木) 12:49 -

引用なし
パスワード
   ▼うしねこ さん:
>検索値"c": セル"d"を参照して同ファイル内の別シートリストから、検索結果を表示
>検索値"b": セル"e"の最初の2文字を参照して同じく検索結果を表示
>
>何度もお手数をお掛けしますが、宜しくお願いします。
これだけ言われてもよく解りません。
シートレイアウトやデータがどうなっているのかもわからないので...。

1つだけ、注意点。
これもデータ等がどうなっているのか解らないので、よくやりそうな物を。

例えばデータがこんな風になっているとして、
A列は、数値です。

A   B
11   あ
12   い
13   う
14   え
15   お
16   か
17   き
18   く
19   け
20   こ

検査値データ、「15AB」の左から2文字を取り出して検索する場合の注意点。
これ↓で検索できるだろうと思ったら大間違い。
検索するデータが数値なのに文字の「11」を検査値としてしているのでエラーになります。

=VLOOKUP(LEFT("15AB",2),A1:B10,2,0)

数値の場合もLeft、Right、Mid等で抜き出した場合、数値でなく文字になります。
エクセルは、文字と数値を厳格に区別します。
また、エクセルが自動で数値に変換して処理する場合があるので、この辺りが思い違いをされる原因かもしれません。

エラーにならず抜き出すには、文字の数字を数値に変換してやればいいです。
例えばこんな風に。

=VLOOKUP(--LEFT("15AB",2),A1:B10,2,0)

↑をVBA上で計算させたい場合は、

Dim st As String, ans As Variant
st = "15AB"
ans = Application.VLookup(CLng(Left(st, 2)), Range("A1:B10"), 2, 0)
If IsError(ans) Then
  MsgBox "見つからない"
Else
  MsgBox ans
End If

でまた、上の注意点。
CLng("あいう")
数値に変換できない文字を数値に変換するとエラーになるので、この辺りのチェックも必要になってきます。

【60877】Re:検索値をセル内最初の2文字に指定し...
質問  うしねこ E-MAIL  - 09/3/19(木) 15:18 -

引用なし
パスワード
   ▼Jaka さん:

いろいろとご丁寧に説明いただいて、本当に恐縮です。
初心者なので、どう説明したらいいか分からず、お手数をお掛けします。
実際にやりたいことは、省略化した文字をフルネームで入れる作業です。
そのデータは以下の通りです。

A  B
YO  YOKOHAMA
KW  KAWASAKI
NG  NAGOYA
OS  OSAKA
KB  KOBE
AM  AMSTERDAM
NC  NEWCASTLE
IS  ISTANBUL
AN  ANTWERPEN
TN  TUNIS

例えば、"YOLH0001"というセルの最初の2文字"YO"を検索値にして、"YOKOHAMA"と表示させたいのです。エクセルにマニュアルで入力するときは、
=VLOOKUP((LEFT(E10,2)),'PORT'!A:B,2,FALSE)と式を入れて表示出来ているのですが、それをVBAで表示する仕方が分からないのです。
本当に、説明が稚拙でお手を煩わして申し訳ないです。

【60878】Re:検索値をセル内最初の2文字に指定し...
発言  Jaka  - 09/3/19(木) 16:48 -

引用なし
パスワード
   >"= VLOOKUP(LEFT($e" & ii & ", 2) " & ii & ",CODE,3,FALSE)"
>"=VLOOKUP($d" & ii & ", CODE2,2,FALSE)"
これらを考慮すると。

"=VLOOKUP((LEFT(E" & ii & ",2)),'PORT'!A:B,2,FALSE)"
こういうことでしょうか?

それと、数式にエラー処理も入れておいた方がいいですね。
入れないと入力した時に実行エラーになりそう。

=IF(COUNTIF(A:A,LEFT(E" & ii & ",2))=0,"",VLOOKUP((LEFT(E" & ii & ",2)),'PORT'!A:B,2,FALSE))
とか。
COUNTIFでは無く、そのままのVloolupややMatchを使ってエラー判定させてもいいですけど。

【60879】Re:検索値をセル内最初の2文字に指定し...
発言  Jaka  - 09/3/19(木) 17:00 -

引用なし
パスワード
   >それと、数式にエラー処理も入れておいた方がいいですね。
>入れないと入力した時に実行エラーになりそう。
エラー値が返るからエラーにはならないか...。

【60880】Re:検索値をセル内最初の2文字に指定し...
お礼  うしねこ E-MAIL  - 09/3/19(木) 17:25 -

引用なし
パスワード
   ▼Jaka さん:
>"=VLOOKUP((LEFT(E" & ii & ",2)),'PORT'!A:B,2,FALSE)"
>こういうことでしょうか?

うまくいきました!!
本当にありがとうございました。
私の説明が悪いせいで、いろいろと回り道させてしまって本当に申し訳なく思っております。でも、いただいた式でうまく動いたので感激です!
どうもありがとうございました。

3658 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free