A       B     C         
   形式    数量  用途
1 AW-E-55    145  使用
2 SY-A-35    234    使用
3 SY-X-40    650    使用
4 CH-A-77    210    禁止
5 CH-B-50    300    禁止
6 CH-B-35    250    禁止
7 GS-P-40    450    使用
8 HJ-L-55    150    禁止
9 HJ-M-20    200    禁止

上記のような表があり、A列の値によってC列の用途をIF関数を用いて表示するにはどうすればよいのでしょうか?
 
A列の値でA1~A9の値がCH-○○以上CH-○○以下は禁止またHから始まる物は禁止というような条件でC列の用途表示区分を表示させる方法、論理式がよく分かりません。
 子供の頃から算数が苦手で>,=,<>等の等号や不等式の理解が弱いので教えていただけないでしょうか?

 どのような方法、論理式を入れると良いのでしょうか?

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

A 回答 (4件)

>A列の値でA1~A9の値が



1. CH-○○以上CH-○○以下は禁止
2. Hから始まる物は禁止

実際の禁止は、この二種類よりも多いのですか?
そうすると、今の式ではもたないくなりますね。

C1:~

=IF(COUNT(FIND("CH-",A1))*(AND(--RIGHT(A1,2)>29,--RIGHT(A1,2)<81)),"禁止",IF(COUNT(SEARCH("H?-",A1)),"禁止","使用"))

1の設定部分:

AND(--RIGHT(A1,2)>29,--RIGHT(A1,2)<81)
「30」以上「80」以下
ここを実際の値に設定してください。

そのカッコの中に入れれば出来ると思います。

2.
Hから始るような、単純設定で、複数ある場合は、

{"H?-","U?-"}

このように設定できるはずです。
    • good
    • 0

VLOOKUP関数は、FALSE型が質問に多いですが、本家(出生の始まり)はTRUE型のようです。


FALSE型では表が膨大になるとのことですね。であれば
TRUE型で、表を作れば10行(数行で)以内ですむかもしれません。
TRUE型は普通は数値(封筒の重さグラム数とかの数)で段階を判別する(逆にいえば、表を構成する)のですが
CH-A01 禁止
CH-B09 許可
CH-X20 禁止
のような表が作れないか、試しに考えてみてください。
第1列目の形式の記号数字は、文字列のソート昇り順にしないとなりません。予想では、無理かなとも思いますがそういうものもあるということで
アドバイス。
例データ
表としてD1:E4に
aNEAR
cOK
fNo
jOK
A1:A10に
A列   B列(関数式結果)
aNEAR
bNEAR
cOK
dOK
eOK
fNo
gNo
hNo
iNo
jOK
B1に
=VLOOKUP(A1,$D$1:$E$4,2,TRUE)
と入れてB10まで式複写。結果上記B列。
    • good
    • 0

> データーテーブル表が膨大な物になり、頻繁にコードが変更になる


> ので都度、テーブルの修正が追い付かないもので

全部のコードを常時網羅するのが面倒くさいからルールで済ませ
ちゃおうって、そういう時こそvlookup()関数ですが。

ヘルプでvlookup()関数の第4パラメータがTRUEの場合の使い方を読
んで下さい。この場合、表に
CH-A-77 210 禁止
CH-B-51 300 使用
と書いておくと、CH-A-77以上CH-B-51未満を禁止にします。
H 150 禁止
I 400 使用
なら、Hで始まるヤツは全部禁止です。

簡単でしょ。
    • good
    • 0

複雑な条件はVLOOKUPなどを使用した方が解りやすいと思います。


「CH-○○以上CH-○○以下」は数字じゃないですし。

条件が例に挙げたものだけで、形式が固定長なら

=IF(OR(LEFT(A2,1)="H",AND(LEFT(A2,2)="CH",VALUE(RIGHT(A2,2))>=35,VALUE(RIGHT(A2,2))<=77)),"禁止","使用")
    • good
    • 0
この回答へのお礼

ご返答有難うございます。ご指摘のように数値でないアルファベットの並んだ商品表を取り扱っているもので、条件設定が分からず、困っています。
 VLOOKUPでもできるのは知っていますが、データーテーブル表が膨大な物になり、頻繁にコードが変更になるので都度、テーブルの修正が追い付かないものでIF関数で表示させたいのです。
 連絡いただいた数式を当てはめて作りたいと思います。有難うございました。

お礼日時:2005/08/29 22:54

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

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

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

Qアクセス A列コピー B列貼り付け 更新クエリ?

お世話になります
アクセスで、たぶん更新クエリだと思うのですが

A列をコピーしB列に貼り付けさせたいのですが
初歩的な質問で申し訳ありません
わかる方お願いします

Aベストアンサー

えーと、細かい状況は分からないのですが、下記操作で解決できますか?
1.元の文字列データが入ってるテーブルを表示させる。
2.テーブルのウィンドウのタイトルのところで右クリック。
3.「テーブル デザイン」を選択。
4.「フィールド名」が空白になっている所に適当なフィールド名を入力
5.その右隣のデータ型の欄のドロップダウンメニューから「日付/時刻型」を選択。
6.もう一度タイトルのところで右クリック。
7.「データシートビュー」を選択。
8.元のデータのフィールド名のところで右クリック。
9.「コピー」をして、4.で作ったフィールド名で右クリック。
10.「貼り付け」を選択。
11.貼り付けていいかどうかのポップアップウィンドウが出てくるので、「はい」を選択。

以上でどうでしょう?
他からインポートしてきたデータを使ったことがないので、自信はないですが、通常ならこれでいけるかと思います。
また、補足が必要なら明日以降になってしまいますが補足いたします。

Qアクセスからエクセルのa列に入力されているセルの個数を数えたい

アクセスvbaで
エクセルのa列の個数を数えることは可能でしょうか?

MsgBox GetObject(, "Excel.Application").Workbooks("Access用.xls").WorkSheets("集計").WorksheetFunction.Count(Columns("a"))

だとコンパイルエラ-となってしまいます。

なので、
エクセル側でa1に集計セルを作って
MsgBox GetObject(, "Excel.Application").Workbooks("Access用.xls").WorkSheets("集計").Range("a1").Value

としていますが
できればアクセスからダイレクトに個数を数えたいです。
できますでしょうか?
よろしくお願いします。

Aベストアンサー

MsgBox GetObject(, "Excel.Application").WorksheetFunction.Count(GetObject(, "Excel.Application").Workbooks("Access用.xls").WorkSheets("集計").Columns("a"))

QEXCELのA列に全て入ってしまったデータをセル毎に表示したい。

あるホームページにTableタグで記述された表があります。
その表をドラッグ選択でコピーし、EXCEL2003にテキスト形式で貼り付けると、EXCELのA列に各行のデータが全て入ってしまいます。
tdタグ毎に、EXCELのセルに振り分けて表示したいのですが、どうすればよいでしょうか。

【試したこと】
1)文字コードを変換すればよいのかと思い、解らないながらもStirling1.31というソフトで文字コードをみると、列の間は[20]というコード?になっておりました。半角スペースで入力したデータも同じく[20]と出ますので、tdタグは半角スペースとして認識されているのでしょうか。
文字列にも普通に半角スペースがまぎれているので、tdのコードのみをどう変換したらよいのかわからず、閉じました。

2)EXCELのファイルをテキスト形式で保存し、開くときにスペース区切りを選んで、区切りたい位置をクリックして、"フィールドの幅"というものを設定したものの、文字の長さが行ごとに違うので固定の幅では上手くセル毎に振り分けられませんでした。

至らない説明で申し訳ありません。ホームページのデータをダイレクトにEXCLEにテキストで貼り付けるという方法からして間違っているのでしょうか。
600件以上あるデータで困っています。
詳しい方ご教授願います。
どうぞよろしくお願いいたします。

あるホームページにTableタグで記述された表があります。
その表をドラッグ選択でコピーし、EXCEL2003にテキスト形式で貼り付けると、EXCELのA列に各行のデータが全て入ってしまいます。
tdタグ毎に、EXCELのセルに振り分けて表示したいのですが、どうすればよいでしょうか。

【試したこと】
1)文字コードを変換すればよいのかと思い、解らないながらもStirling1.31というソフトで文字コードをみると、列の間は[20]というコード?になっておりました。半角スペースで入力したデータも同じく[20]と出ますの...続きを読む

Aベストアンサー

通常は[区切り位置]を使う場面ですが、
今回の場合は、
>文字列にも普通に半角スペースがまぎれている
ということですから、
単純にスペースで区切ってしまうわけにはいきませんね。

 1.Webページ上の表をコピーする
 2.適当なシートにまずは【HTML形式で】貼り付ける
 3.2をコピーする
 4.目的のシートで右クリック > [形式を選択して貼り付け] > [値]

でいかがでしょうか。

ご参考まで。

Q[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。

VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。

Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0

End If
End Sub
と過去の質問で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか?
宜しくお願い致します。

Aベストアンサー

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表格が、この「Find」 です。

>Set A = Worksheets("Sheet1").Cells.Find("A")

>過去の質問で考えてみたのです

どうも、Find メソッドは、あるレベル以下の人は、省略する傾向があるようです。何が大事で、何が大事でないかというのは、やってみなければ分かりませんが、検索語だけを入れる書き方は、実務では、あまりしないほうがよいと思います。

だいたい、以下のTestFind2 ぐらいまでに、省略は、とどめたほうがよいです。

それは、Find は、必ずしも自分が思っているデフォルトとは違うことがあるので、「明示的(意図的に)」にオプションは入れたほうがよいです。
例えば、大文字小文字の違いを付けるなら、MatchCase:=True, 数式まで探すなら、LookIn:=xlFormulas

なお、Find メソッドは、5年経っても、たぶん完全に覚えられません。面倒なコードのひとつです。ですが、これはパターンが決まっているので、ひとつパターンが決まったら、それに当てはめればよいだけです。

#3さんで示されているMougのサンプルコードと似てはいるのですが、Mougのサンプルコードでは、Verionによって、失敗することがあります。

'--------------------------------------
'記録マクロをそのまま使う方法
Sub TestFind1()
Dim c As Range
 Set c = Columns("L:L").Find(What:="A", _
           After:=ActiveCell, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           SearchOrder:=xlByRows, _
           SearchDirection:=xlNext, _
           MatchCase:=False, _
           MatchByte:=False, _
           SearchFormat:=False)
 c.Offset(0, 1).Value = 0
End Sub
'--------------------------------------
'TestFind1 をアレンジしてみる
Sub TestFind2()
Dim c As Range
'検索語
Const MYTXT As String = "A"
 Set c = ActiveSheet.Columns("L:L").Find(What:=MYTXT, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           MatchCase:=False)
 If Not c Is Nothing Then
    c.Offset(0, 1).Value = 0
 End If
End Sub

'---------------------------------------
'複数ある場合(パターンを使った方法)
'---------------------------------------
Sub TestFind3()
  Dim c As Range
  Dim FirstAdd As String
  Const MYTXT As String = "A"
  Set c = ActiveSheet.Columns("L:L").Find( _
    What:=MYTXT, _
    LookIn:=xlValues, _
    LookAt:=xlPart, _
    MatchCase:=False)
  
  If Not c Is Nothing Then
    FirstAdd = c.Address
    Do
      c.Offset(, 1).Value = 0
      Set c = ActiveSheet.Columns("L:L").FindNext(c)
      If c.Address = FirstAdd Then Exit Sub
    Loop Until c Is Nothing
  End If
End Sub

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表...続きを読む

QACCESSの主キーの列の隣列

に+列があるテーブルがあります
たとえばヘルプで読み出せるサンプルNorthwind.mdbの得意先テーブルなどです

この+列の名前はなんと言うのでしょうか?
普通に作ったのではこういうものはできません
どうやったらこういう+列を作ることができるのでしょうか?

Aベストアンサー

"サブデータシート"だと思われます。

参考URL:http://www.relief.jp/itnote/archives/000417.php


人気Q&Aランキング

おすすめ情報