
A列 B列 D列 E列
CODE1 VLOOKUP CODE2 NAME
01-A000 ああああ 01 ああああ
10-A123 #N/A 05 いいいい
20-B223 #N/A 10 うううう
30-C444 #N/A 15 ええええ
AB-S455 きききき 18 おおおお
A4-5554 くくくく 20 かかかか
AB きききき
A4 くくくく
以下略 以下略
のようなデータがあります。
A列のコード1の先頭2文字でD列をVLOOKUP検索します。
A列、B列ともに書式は文字列としています。
=VLOOKUP(LEFT(A2,2),$D$2:$E$29,2,0) という式をいれフィルドラッグすると先頭2文字が数字になるデータだけが01以外ヒットしません。
=VLOOKUP(IF(ISERROR(LEFT(A2,2)*1),LEFT(A2,2),LEFT(A2,2)*1),$D$2:$E$29,2,0) とすると、ある程度解消するのですが、1をかけると1になってしまう01がヒットしなくなるのは当然として、それ以外の数字でもD列にあるのにヒットしない場合があります。
D列のデータに先頭にシングルクォーテーションを入れればすべて解決するのですがそれ以外に解決する方法はないでしょうか?

No.5ベストアンサー
- 回答日時:
>D列のセル書式は文字列になっています。
Excel は、文字列書式にしたら、そのセルを参照している数式は「不活性化」になるはずだと思いますが、私だけでしょうか? 調べてみましたが、Excel 2007までは、「不活性」状態になる現象は直っていないはずです。
ところで、
現在の数式
=VLOOKUP(IF(ISERROR(LEFT(A2,2)*1),LEFT(A2,2),LEFT(A2,2)*1),$D$2:$E$29,2,0)
私の設定なら、エラーは発生していません。
A列の[CODE1]も、当然、一般/Gなどの書式にしておきます。
D列の[CODE2]は、数値のままで、左詰め、書式、「00」です。
書式-文字列は、孤立しているセルなり列ならよいのですが、参照先としては、そのような設定は使えないはずです。だから、どうしてもという場合は、Lotus1-2-3にある、プレフィクスの「'」を代用するわけです。別に、それが何かを邪魔するというわけでもありませんが、数式バーには出てきてしまいます。
後、エラーが出るとすれば、[CODE1]のA列の2文字が正しくないとか、そういう所ぐらしかないように思いますね。
ありがとうございます。
D列については自分で作ったデータではないので一律にプレフィクスの「'」を付加することにしました。
これなら安心ですよね?
No.6
- 回答日時:
添付の画像からはD列がセルの配置で左詰を指定していない限り数値になっているとは考えずらい。
よって、一致しない数字のセルにスペース等の不要なコードが混入している可能性がありますので確認して下さい。
>D列のデータに先頭にシングルクォーテーションを入れればすべて解決するのですがそれ以外に
>解決する方法はないでしょうか?
⇒仮にセルの配置で左詰でセルの書式が標準、数値の場合、その範囲を選択→データ→区切り位置→
次へ→次へ→文字列を選択→OKとして見て下さい。
> 添付の画像からはD列がセルの配置で左詰を指定していない限り数値になっているとは考えずらい。
その通です。
数値ではないのに数値の扱いになるのが問題なのです。
> 一致しない数字のセルにスペース等の不要なコードが混入している可能性
チェック済みですからありません。
No.4
- 回答日時:
D列の書式は文字列とのことですが、D列に数値を入力した後に書式を文字列に変更していませんか?
数値を入力した後に書式を文字列にしても、見た目は左詰めで表示されるので文字列のように見えますが、中身は数値のままです。
01と05だけは、入力した後に書式を文字列にすると前ゼロが付かないので、書式を文字列に変更した後で入力し直したのではありませんか?
書式を文字列にした後に入力すれば数値であっても文字列となります。
01だけうまくいっているのはそのためでしょう。
10,15,18,20,30などの2桁の数値を再度入力し直せば大丈夫だと思います。
> D列の書式は文字列とのことですが、D列に数値を入力した後に書式を文字列に変更していませんか?
掲示したデータはそうです。
本番データはよそからもってきたものですからどういう入力をされたかはわかりません。
> 10,15,18,20,30などの2桁の数値を再度入力し直せば大丈夫だと思います。
どうもデータを作り直さなくてはならないようですね。
数が多いので
For Each C In Selection
If IsNumeric(C.Value) Then
C.Value = "'" & C.Value
End If
Next
で、あたまにシングルクォーテーションをつけて逃げることにします。
No.3
- 回答日時:
状況からみると、No.1さんがおっしゃる通り、D列は数値として認識されているようですが、
=VLOOKUP(LEFT(A2,2),$D$2:$E$29,2,0)
↓
=VLOOKUP(TEXT(LEFT(A2,2),"00"),$D$2:$E$29,2,0)
でどうでしょうか?
> =VLOOKUP(TEXT(LEFT(A2,2),"00"),$D$2:$E$29,2,0)
> でどうでしょうか?
LEFT関数で取り出した時点で数字は文字列化しますのでTEXT関数では残念ながら意味が無いです。
書式では文字列としているのに数値として認識されているD列をどうするかが問題のようです。
ありがとうございました。
No.2
- 回答日時:
Excel2007だと、30-C444以外は正常にヒットしましたけど。
数式を
=VLOOKUP(IF(ISERROR(LEFT(A2,2)*1),LEFT(A2,2),LEFT(A2,2)*1),$D$2:$E$29,2,0)
にするとある程度解消するという事は、No.1さんの言われるとおり、D列の中身が数字扱いになっていると思われます。
データを先に入れた後に書式を変更しても見た目は変わりますが、データは元の書式のままなのでその場合は該当セルにて、F2を押して入力状態にした後エンターで確定処理を行ってみてください。
セルの中身が数字かどうかの判定は
=ISNUMBER(D2)
を使えば判定できます。(D2は検査したいセルのアドレスです)
> Excel2007だと、30-C444以外は正常にヒットしましたけど。
2007ではこんな問題が起きないのですか!?
私はまだ2000なんです。
> データを先に入れた後に書式を変更しても見た目は変わりますが、データは元の書式のままなのでその場合は該当セルにて、F2を押して入力状態にした後エンターで確定処理を行ってみてください。
ううっ、やはりそうしなきゃだめですか。
なにぶん数がおおいものですから・・・・。
> 数式を
> =VLOOKUP(IF(ISERROR(LEFT(A2,2)*1),LEFT(A2,2),LEFT(A2,2)*1),$D$2:$E$29,2,0)
> にするとある程度解消するという事は、No.1さんの言われるとおり、D列の中身が数字扱いになっていると思われます。
はい、それはわかります。だからこの式をつくったわけですから。
No.1
- 回答日時:
A列の書式が文字列として入っているので、D列も文字列でないとヒットしないです。
現在、D列は数値として入っています。シングルクォーテーションを入れる(数値を文字列にする)とヒットするというのはそのためです。シングルクォーテーションを入れる以外の解決策としては、D列のデータを書式設定から分類を「文字列」に変更すればいいです。A列のデータはコードに英字などの文字が入っているので数値にはできませんからね。VLOOKUPでマッチングするときは形式を揃えてあげないとダメです。
> D列も文字列でないとヒットしないです。現在、D列は数値として入っています。
ありがとうございます。
D列のセル書式は文字列になっています。
添付画像でD列の数字が左によっているのでわかるとは思いましたが質問に誤記がありました。
誤)A列、B列ともに書式は文字列としています。
正)A列、D列ともに書式は文字列としています。
B列は数式ですので文字列ではありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Visual Basic(VBA) 入力と同時に桁数を詰める 3 2022/09/11 20:23
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
ある一定時間を超えた場合の超...
-
【スプレッドシート】指定の日...
-
エクセルでの複数条件下での標...
-
Excelの表以外が暗い?
-
エクセルで、一つのセルに二つ...
-
隣のセルに入力したら自動的に...
-
エクセルで年月の合計の関数を...
-
エクセルにて「週」から日付を...
-
エクセルで条件に当てはまる曜...
-
EXCELで条件ごとに集計するには
-
エクセルで角度の計算できますか?
-
時間帯ごとの集計をしたいがエ...
-
時間の足し算
-
EXCEL 年月表示をするVBAを教...
-
ある数値から始まるものをカウ...
-
複数連続した列幅や行高を一発...
-
エクセルVLOOKUP関数でヒットし...
-
EXCEL 経過年数の平均を求めた...
-
excelでの文字を隠す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
ある一定時間を超えた場合の超...
-
隣のセルに入力したら自動的に...
-
エクセルでの複数条件下での標...
-
【スプレッドシート】指定の日...
-
エクセルで年月の合計の関数を...
-
エクセルで、一つのセルに二つ...
-
EXCEL 経過年数の平均を求めた...
-
エクセルにて「週」から日付を...
-
エクセルで角度の計算できますか?
-
複数連続した列幅や行高を一発...
-
Excelの表以外が暗い?
-
エクセル指定日付の数値を別シ...
-
エクセルで「ぶら下げ」書式を...
-
Excel:月またぎを含む日数の差...
-
エクセル シフト表 6連続勤...
-
Excelのセルにカレンダーの月日...
-
ある数値から始まるものをカウ...
-
excelでの文字を隠す方法
-
時間帯ごとの集計をしたいがエ...
おすすめ情報