パソコン名人のみなさま、いつもお世話になっています。

VLOOKUP関数で、検索値と範囲内の値に全角と半角の違いがあると、拾ってくれませんが、全角半角の違いは無視して拾ってくれるようにすることはできますでしょうか?

検索の型のTRUEの使い方がわからないのですが(FALSEしか使ったことがない)、それと何か関係あるでしょうか。
(関数式作成画面で、「検索の型には<検索値>と完全に一致するだけを検索するか、その近似値を含めて検索するかを論理値で指定します」とあるが、その言葉の意味すらわからない)

宜しくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

半角・全角を同一視して、C1の値をA1~A4と照合してB列の値を持ってくる例です。



 =VLOOKUP(JIS(C1),JIS($A$1:$B$4),2,FALSE) または
 =VLOOKUP(ASC(C1),ASC($A$1:$B$4),2,FALSE)

配列数式なので、登録する時に、CtrlキーとShiftキーを押しながらEnterとします。
ただし、上の2式はB列の値を、全角または半角にしてしまいます。抽出する列が全角のみ、または半角のみなら上式で大丈夫でしょう。

これを回避した式が下です。VlookUpのかわりに、MatchとIndexを使っています。これも配列数式です。
CtrlキーとShiftキーを押しながらEnterとします。

 =INDEX($B$1:$B$4,MATCH(JIS(C1),JIS($A$1:$A$4),FALSE))

B列はそのまま抽出されます。
3式とも計算用の別の列を使わない前提で作っています。ご参考に。
    • good
    • 0
この回答へのお礼

*タイトルは、EXCEL97の間違いでした。すみません。でも今回は同じですよね?

nishi6さま...本当にいろいろお世話になっております。
具体的に式を教えて頂き、とても助かります。
しかし、実際はほとんど全角に統一されていて、たまに半角が出てきてエラーになってしまうという状況なので、こんな複雑(私から見たら)な式を作らなくても、VLOOKUPの式だけ入れておき、エラーが出た時点で手修正しようかな...? なんて、弱気になっております。
でも、もうちょっと簡単にできないかな? と甘い考えを持っていたので、それが無理らしいと分かっただけでも、大収穫です。
達人の方々は、このような場合でも、手修正に頼らず最初からエラーを回避すべくきっちり式を作っておくのかな?

取り急ぎお礼がしたく。
ありがとうございました!!

お礼日時:2002/01/08 19:38

>全角半角の違いは無視して拾ってくれるようにすることはできますでしょうか?



VLOOKUP関数単独ではできません。
JIS関数:半角→全角
ASC関数:全角→半角
を組み合わせる必要があります。
(データ列が半角、全角の何れかに統一されている必要があります)

>検索の型のTRUEの使い方がわからないのですが

VLOOKUPにおいて、FALSEを指定すると完全に一致しなければ#N/Aが返されるが、
TRUEを指定すると必ず何かの数値を選択します。

例1)数値の検索値:4、検索範囲:‥3.8、3.9、4.1、4.2‥の場合
3.9の行の該当するを持ってくる

例2)文字の検索値:AD、検索範囲:‥AA、AB、AC、AE‥の場合
ACの行の該当するものをもってくる

という形式なのですが、ご理解いただけますでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます!!
まだまだ知らない関数が多すぎる...。道は長い...。でも、本件はおかげさまで理解はしました。

FALSE/TRUEの件、理屈は分かりました。ありがとうございます。でも、実際仮名でやったら、似ても似つかないものがピックアップされてしまいました。(検索値「エ・・・(後略)」、検索範囲には、カタカナのセルと漢字のセルとアルファベットのセルが混在しているので、せめてカタカナのセルの行の該当するものが引っ張られてくるかと思ったら、なぜかアルファベットのセルの該当するものが...)。
まあでも今回は、理屈さえ分かれれば、用が足りますので、あまり欲張らない様にしないと...。無理して背伸びしないようにしまーす。

お礼日時:2002/01/08 19:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL2022でVLOOKUP関数の「検索値」に><等の不等式を使って、「近似値」を使いたい!

 EXCEL2022でVLOOKUP関数の「検索値」に、ヘルプでは「近似値」が使えるとあるので、><等の不等式を使って、範囲指定を行い、複数の項目を抽出してきたい!
 例として、
(1)2<「検索値」<30、程度で、60項目程を選び出したうえ、
(2)なおかつ、その60項目の中から、オートフィルタ機能を使用し   て、「トップテン」上位の10項目を表示させる方法
 を模索中です。

 ★実際に、このVLOOKUP関数を使用して、プログラムを作成されている方は、
 「検索値」に『範囲指定を行い、複数の項目を抽出できない』ようだと、★たった一つのみの単独の値に対応する単一項目★しか抽出できない為、広範な使用に適さず、従って、たいへん使い勝手が悪い、使用用途の限定される、いわゆる”退屈な機能”とならないでしょうか?

 ヘルプより、
 VLOOKUP
関連項目 指定された範囲の左端の列で特定の値を検索し、範囲内の対応するセルの値を返します。

 書式
VLOOKUP(検索値,範囲,列番号,検索の型)
検索値 範囲の左端の列で検索する値を指定します。検索値には、値、セル参照、または文字列を指定します。

 横に”行”を検索して、一致する項目を表示させるものでは、HLOOKUP関数というものも在りますが、私の意図する”使用方法”を満足させる”関数”、343もあれば、一つ位はな~い"かんすぅ~"?(意図した訳ではないのに、やや、字面が、難しい言葉ばかりになってしまったので、"和み系の、普段は言わないジョーク"をネットなので、書き込んでしまいました。やや反省。)(^_^;)

 EXCEL2022でVLOOKUP関数の「検索値」に、ヘルプでは「近似値」が使えるとあるので、><等の不等式を使って、範囲指定を行い、複数の項目を抽出してきたい!
 例として、
(1)2<「検索値」<30、程度で、60項目程を選び出したうえ、
(2)なおかつ、その60項目の中から、オートフィルタ機能を使用し   て、「トップテン」上位の10項目を表示させる方法
 を模索中です。

 ★実際に、このVLOOKUP関数を使用して、プログラムを作成されている方は、
 「検索値」に『範囲指定を行い、複数の項...続きを読む

Aベストアンサー

こんにちは。Wendy02です。

>回答の本文では、『10項目が出てきます。』と在りますので、本文にある通り、しっかり対応させる形で、『10セルに、10項目出す』には、他に、どのような当該箇所を、可変させて、セルに入力させていったら良いのでしょうか?

10項目自体は、フィルダウンコピーで、数式を10個下に作っておくということです。

数式の中の、
ROW(A1)>10
は、10以上になったら、"" になるという意味です。

>一体何番目に当たるのでしょうか?
何番目に当たるかは、一行目からなら、その行数が、何番目ということになるかと思いますが・・・。


>私が知りうる範囲では、一番、詳しいサイトであり
>詳らかに記載したサイト★★を御存知でしたら、
>★★関数343の詳細な解説

すみません。私は、直接Excelの関数の詳しいサイトを知りません。関数については、Webサイトは、どこも参考にしたことがありません。しょせん、人の作ったものであるけれども、意図してなのか分かりませんが、ある種の偶然性が潜むので、あまり求めても、ややこしくなるだけのような気がします。また、Excel 専用の掲示板等では、独特のスタイルの数式があり、そのパターンは知ってはいますが、誰が書いても同じようなものですので、ほとんど興味がありません。

VBAやマクロのほうが、ずっと簡単なことが多いです。

こんにちは。Wendy02です。

>回答の本文では、『10項目が出てきます。』と在りますので、本文にある通り、しっかり対応させる形で、『10セルに、10項目出す』には、他に、どのような当該箇所を、可変させて、セルに入力させていったら良いのでしょうか?

10項目自体は、フィルダウンコピーで、数式を10個下に作っておくということです。

数式の中の、
ROW(A1)>10
は、10以上になったら、"" になるという意味です。

>一体何番目に当たるのでしょうか?
何番目に当たるかは、一行目からなら、その行...続きを読む

QAND関数 引数が0以外の値がTRUE,0がFALSEとみなされる の意味について

AND関数の注意点に、質問タイトルが書いてありました。
全文は以下の通りです。
引数が数値の場合には、0はFALSE、それ以外の値はTRUEが引数に指定されたものとして計算されます。

AND関数は全てがTRUEのとき、TRUEを返す関数だと思っています。
FALSEを指定するとは?
ここでのFALSEが完全一致、という意味のFALSEでしょうか?
???
混乱しています(-_-;)
お分かりになる方ご教授くださいませ。
できたら 例など添えていただけるとありがたいです<(_ _)>

Aベストアンサー

>変数aの値が0である場合にはこのAND関数はFALSEを返す、ということでしょうか?
その通りです。
言語的には、数値と数値以外を比較する事はできないので、内部的には、FALSEの値
として0が使われます。
#TRUEは言語によって、1または-1が使われます。

QAccess Left$関数で全角半角が混在したデータの抽出 バイト数がずれる

AccessクエリーでのLeft$関数について教えてください。
半角英数字と漢字文字列が混在したフィールドから
Left$関数で17バイト抽出したいのですが、
漢字を一文字=1バイトで換算した結果がかえってしまいます。

例)

1001-500本aaa-GG-りんご ⇒ 1001-500本aaa-GG-り

1002-500mLaaa-GG-みかん ⇒ 1002_500mLaa-GG

※[本]が漢字で[mL]は半角英数です。

後で抽出が自由にできるように、
[GG]以前の文字列のバイト数を固定にしていたのですが
全角・半角が混在していると抽出にずれがでてしまうことを知りませんでした。

※[4バイト]+"-"+[8バイト]+"-"+[GG]+"-"としていました。



GGを含むGGより以前の文字列を抽出するにはどうすればよいでしょうか?

(漢字1文字を2バイトと換算しながらLeft$で抽出するには?)

よろしくおねがいいたします。

Aベストアンサー

>Left$関数で17バイト抽出したいのですが漢字を一文字=1バイトで換算した結果がかえってしまいます
Left関数で指定するlengthの数値はバイト換算ではありません。文字数です。そのため漢字1文字を2バイトとはしません。
Access2000以降(?確か)はテキスト型のフィールドはバイトではなく文字数で管理しています。そのため「全角・半角が混在していると抽出にずれがでてしまう」ではなく「文字数管理を知らなかった」という事になります。
そういう事なので 1001-500本aaa-GG-りんご は 1001-500本aaa -GG-りんご と500本aaaの後にスペースでも1つ入れなくてはAccessでは固定とならなかったのです。
>GGを含むGGより以前の文字列を抽出するにはどうすればよいでしょうか
クエリで抽出するなら("GG"の前にGが入るレコードはないとすれば)
Mid([フィールド名],1,(InStr(1,[フィールド名],"G")+1))
かLeft関数を使用するなら
Left([フィールド名],(InStr(1,[フィールド名],"G")+1))
で簡単に抽出出来ます。

>Left$関数で17バイト抽出したいのですが漢字を一文字=1バイトで換算した結果がかえってしまいます
Left関数で指定するlengthの数値はバイト換算ではありません。文字数です。そのため漢字1文字を2バイトとはしません。
Access2000以降(?確か)はテキスト型のフィールドはバイトではなく文字数で管理しています。そのため「全角・半角が混在していると抽出にずれがでてしまう」ではなく「文字数管理を知らなかった」という事になります。
そういう事なので 1001-500本aaa-GG-りんご は 1001-500本aaa -G...続きを読む

QExcel 文字バイト数を求めた後のIF関数の結果が全角と半角で異なる

日本語Windows 98の環境でExcel2000を使用し、
文字が1バイト文字で30文字もしくは2バイト文字で15文字を超えると「ERROR」と表示される表を作成しました。

列A:文字入力
列B:=LENB(A1)
列C:=IF(B1>30;"ERROR";" ")

とした時、私のPCでは、関数の意図通り、
列Aが半角30文字、全角15文字を超えると
「ERROR」と表示されます。

このファイルを別のPCにメールで送りました。
そのPCは、XP(英語環境で日本語使用可能)のExcel2003です。
ファイルを開くと、列Bは正常に計算されてますが、
列Cにおいて列Aが全角文字のみで入力されていた場合、
列Bが30を超える値の時も「ERROR」と表示されません。
この時点では、もともと英語環境のPCなので
全角が認識されないのだろう、と思ってました。

このPCのユーザーが別のPCにファイルをメールで送付しました。
今度は日本語XPのExcel2003です。
列Bは正常に計算されますが、列Cにおいて列Aが全角文字のみで
入力されていた場合、列Bの値が30を超えていても列Cに
「ERROR」と表示されません。

さっきからネットで5時間くらい調べてますが、
このような現象について解説しているサイトはありませんでした。
書式設定やツール-オプションの辺りの設定を変えると
できるような気がするのですが、
私はXP環境でExcel 2003を持ってないので、わかりません。
どなたかご存知の方ご教授いただければ助かります。

日本語Windows 98の環境でExcel2000を使用し、
文字が1バイト文字で30文字もしくは2バイト文字で15文字を超えると「ERROR」と表示される表を作成しました。

列A:文字入力
列B:=LENB(A1)
列C:=IF(B1>30;"ERROR";" ")

とした時、私のPCでは、関数の意図通り、
列Aが半角30文字、全角15文字を超えると
「ERROR」と表示されます。

このファイルを別のPCにメールで送りました。
そのPCは、XP(英語環境で日本語使用可能)のExcel2003です。
ファイルを開くと、列Bは正常に計算されてますが、
列Cにおい...続きを読む

Aベストアンサー

》 そのPCは、XP(英語環境で日本語使用可能)のExcel2003です

その Excel は英語版(だけど、日本語使用可)ですか、それとも日本語版ですか?
その Excel では、日本語版Excel特有の =LENB()関数や =JIS()関数等も使えるのですか?

》 このPCのユーザーが別のPCにファイルをメールで送付しました

送付したファイル(ブック)は「このPCのユーザーが」元のファイルを上書き保存したものではないですか?

QEXCEL 「ASC」関数  英数字の全角を半角に変換するよい方法があれば教えてください

EXCELで入力しているデータをフィルターを使用して検索できる
データベースにしたいのですが、以前からの入力しているデータの英数字が全角、半角が混在していてます。
フィルター検索の際に全角で入力すると半角入力のものがヒットしないので不便で、英数字の半角統一にしたいと考えています。

ASC関数を使用して英数字の全角→半角を行なうこと考えたのですが
ASC関数ですとカタカタも半角カタカナに変換されるので
英数字だけを全角→半角にする関数や方法などあれば教えてください。

入力データは
漢字、ひらがな、カタカナ、英数字が混在しています。

希望
全角→漢字、ひらがな、カタカナ
半角→英数字

宜しくお願い致します。

Aベストアンサー

こんばんは。

行きがかりで、以下の質問と同じですが、こちらにも書いておきます。

http://oshiete1.goo.ne.jp/kotaeru.php3?qid=4071741
#3 にマクロがあります。

それを手直しし、ユーザー定義関数に変更してみました。
標準モジュールに貼り付けてください。後は、通常の関数のように入れてくださればよいです。ただ、Office の場合は、ExcelのJIS 関数にしても、中身は、単に、1文字ずつを、全角にしているわけではありません。一文字ずつ変換するのは、どちらかというと中途半端な結果になってしまいます。

例えば、
「半角」で、パピプ と入れ、=LEN(A1) とすると、6
それを、JIS関数で変換して、=LEN(A2) とすると、3
が出てきます。

つまり、バ、パ など、半角の濁音、半濁音は、必ずまとめて全角に変換しなければなりません。また、VBA以外で、それを実行するときは、ストリームの中で、半濁音の監視をしないといけないわけですが、幸い、そのようなプログラムは必要ありません。Office に詳しくない方だと、この点を見落としてしまいます。

以下の関数は、フィルタになりますから、そのまま、マクロに入れることも可能です。その場合は、出来れば、VBScrip.RegExp は、参照設定して、そのまま、開放しないままにしておいたほう速いかもしれません。

なお、
>全角→漢字、ひらがな、カタカナ
カタカナ以外に対しては、漢字、ひらがなの半角文字はExcelにはないはずです。
また、=Now()関数 で[22時40分](書式:[DBNum3]h"時"mm"分") を表示したものも、[22時40分]と変換することは可能です。

'-------------------------------
'標準モジュール

Function Zen2Han(strText As Variant) As String
'全角:カタカナ,半角:英数字・記号
  Dim myPats As Variant
  Dim Re As Object ' As RegExp
  '参照設定では、Microsoft VBScript Regular Expressions 5.5
  Dim Matches As Object 'As MatchCollection
  Dim Match As Object 'As Match
  Dim buf As String
  Dim i As Integer
  '半角カタカナ, 全角英数など
  '半角のカタカナはWebで表示できないので、コードにしてあります。
  myPats = Array("([\uFF66-\uFF9F]+)", "([!-}]+)")
  
  If IsEmpty(strText) Then Exit Function
  If StrComp(TypeName(strText), "Range") = 0 Then
    strText = strText.Text
  End If
  Set Re = CreateObject("VBScript.RegExp")
  'Set Re = New VBScript
  With Re
    .Global = True
    .IgnoreCase = True
    buf = strText
   For i = 0 To 1
    .Pattern = myPats(i)
    Set Matches = .Execute(buf)
    If Matches.Count > 0 Then
      For Each Match In Matches
       buf = Replace(buf, Match, StrConv(Match, (i + 1) * 4), , , vbBinaryCompare)
      Next Match
    End If
  Next
End With
Zen2Han = buf
Set Re = Nothing
End Function

----------------------------------
''変換関数を組み合わせたマクロ(標準モジュール)

Sub Main()
  Dim c As Range
  Dim rng As Range
  On Error Resume Next
  Set rng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)
  On Error GoTo 0
  Application.ScreenUpdating = False
  If rng Is Nothing Then
    MsgBox "対象セルが見つかりません", vbExclamation, "終了"
    Exit Sub
  End If
  For Each c In rng.Cells
    c.Value = Zen2Han(c.Value)
  Next c
  Application.ScreenUpdating = True
End Sub

-----------------------------

こんばんは。

行きがかりで、以下の質問と同じですが、こちらにも書いておきます。

http://oshiete1.goo.ne.jp/kotaeru.php3?qid=4071741
#3 にマクロがあります。

それを手直しし、ユーザー定義関数に変更してみました。
標準モジュールに貼り付けてください。後は、通常の関数のように入れてくださればよいです。ただ、Office の場合は、ExcelのJIS 関数にしても、中身は、単に、1文字ずつを、全角にしているわけではありません。一文字ずつ変換するのは、どちらかというと中途半端な結果になってし...続きを読む


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報