• ベストアンサー

Excelセル内でSelect Case文

OracleのSQLでDecode文というのがあります。 Decode(Country, 'JP', '日本', 'US', 'アメリカ', 'CN', '中国', 'その他') のような使い方をしますが、Excelでも同様のことができないでしょうか? If文を使えば、 If(A1="JP","日本",If(A1="US","アメリカ",If(A1="CN","中国","その他"))) となりますが、もう少しスマートにならないものでしょうか?

  • potok
  • お礼率65% (30/46)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ということなら似たようなところで =CHOOSE(1+SUM(A1={"JP","US","CN"})*{1,2,3},"その他","日本","アメリカ","中国") ブール値を計算させるとTRUEが1、FALSEが0となります 直接的な関数はないので4,5個程度ならIFを重ねてもよいと思います 参考まで

potok
質問者

お礼

いやー、すごいですね。 そんなやり方があるんだなー、という感じです。 しかし、手軽に、というのでは、私程度のものであれば、 if文を使っておけば、いいようですね。 勉強になりました。 ありがとうございました。

その他の回答 (2)

回答No.3

No2です 括弧をひとつ忘れましたm(_ _)m =CHOOSE(1+SUM((A1={"JP","US","CN"})*{1,2,3}),"その他","日本","アメリカ","中国")

回答No.1

=IF(ISNA(MATCH(A1,{"CN";"JP";"US"},0)),"その他",VLOOKUP(A1,{"CN","中国";"JP","日本";"US","アメリカ"},2,FALSE)) とか =IF(ISNA(MATCH(A1,{"JP","US","CN"},0)),"その他",HLOOKUP(A1,{"JP","US","CN";"日本","アメリカ","中国"},2,FALSE)) 基本的に、配列定数({ }で囲まれているところ)は別表で作成し、セル範囲を参照します。

potok
質問者

お礼

ありがとうございます。 そんなやり方があるとは勉強になりました。 お答えの趣旨とはずれますが、配列定数というのは今後使わせてもらいます。 今回のは質問の例がまずかったかもしれませんが、 せいぜい項目が4個とか5個程度の時に手軽にちょんプロで使いたいと 思ったことが何度かあったので質問させてもらいました。

関連するQ&A

  • エクセル、VBAを使って指定セルの表示形式を変えたい

    「A1に、特定の文字を入力した時  指定のセル(C1~C10)の表示形式を変えたいのです。」 (例)  A1に特定の言葉を入れる。 ”日本””アメリカ””中国””ベトナム”""  指定したC1~C10の表示形式を各国のドメインを  頭につけて表示するようにします。 ”jp####””US####””CN####””VN####”"####" 一番下に、このようになると思うものを書いた意のですが、 思うように結果ができません。 問題としては、下記のように####の前に文字が来たら 結果が出ません。逆に####の後に文字を入れると結果は出ます。 ####の前に文字を入れて表示させたいのですが、 そうするにはどうすればよいでしょうか。 NumberFormatLocal = "us####" 自分なりに組み立てたものの全体を下記します。 問題がお分かりの方、詳しい方よろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Select Case Target.Value Case "日本" Range("C1:C10").NumberFormatLocal = "jp####" Case "アメリカ" Range("C1:C10").NumberFormatLocal = "us####" Case "中国" Range("C1:C10").NumberFormatLocal = "cn####" Case "ベトナム" Range("C1:C10").NumberFormatLocal = "vn####" Case "" Range("C1:C10").NumberFormatLocal = "####" End Select End If End Sub スペックはWindows、 エクセル2003

  • Select Case文についてご教授お願いします。

    助けて下さい。Select Case文についてご教授お願いします。現在VB2008にてプログラムを作成しているのですが、どうにも煮詰まってしまいました。 作成内容は、Excelの任意のSheetから文字をVB上のTextBox1~50に呼び出し、その内いくつかをCheckBoxとButtonを使用してRichTextBox1に表示させると共に、TextBox51に入力した文字をExcelから呼び出した任意の文字に対応したセルへ保存というものです。Excelからの呼び出しにIf文を使用しているため、同一プロシージャ内で別のIf文を使用してしまうと、先のIf文で決めた変数が反映されないためSelect Case文を使用して保存をさせようとしているのですが上手くいきません。以下に現在のコードを記載しますのでよろしくお願いいたします。 Private Sub Button1_Click~ Excel取得コード If RadioButton1.Checked = True AndAlso RadioButton13.Checked = True Then 'Sheetと列を選択 tuki = CType(Book.Worksheets.Item(2), Microsoft.Office.Interop.Excel.Worksheet) 'Sheet情報 COLUMN1 = "B" '列1情報 COLUMN2 = "F" '列2情報 ・ ・ ・ End If 'ここから先は指定したTextBoxをRichTextBoxに表示(先のIf文内の変数は未使用) RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text End If If Me.CheckBox2.Checked = True ThenIf RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text End If ・ ・ ・ End If 'ここから保存指示=エラー箇所 Select Case tuki.Range(COLUMN1 & "3").Value Case RichTextBox1.text = tuki.Range(COLUMN1 & "3").Value tuki.Range(COLUMN2 & "3").Value = TextBox51.Text Book.Save() という感じで作成しているのですが「String "" から型 'Boolean' への変換は無効です」と表示されます。 他のケースではIf文の変数をSelect Caseに対応できたので、この方法を選択しました。 基本的にSelect Caseの使い方が誤っていると思うのですが解決策が見つかりませんでした。 他の方法も含めて、良い案がありましたらご教授お願いいたします。 長文申し訳ありません。

  • Excel 3つの条件文を一つのセルにいれたい。。

    Excel、下述の 3つの条件文を一つのセルにいれたい。。です。 その一つのセルを仮にD2とします =IF(A2="","",A2*O2) =IF(B2="","",B2*O2) =IF(C2="","",C2*O2) A2に数値がはいっていなかったらD2は空白で、数値が入っていたらA2*O2の計算をする B2に数値がはいっていなかったらD2は空白で、数値が入っていたらB2*O2の計算をする C2に数値がはいっていなかったらD2は空白で、数値が入っていたらC2*O2の計算をする つまり、上述のIF文を一つにまとめたいのです。 頭が悪くてわかりません、誰か助けてください!!!!お願い致しますm(_ _)m

  • エクセルIF文です。

    エクセルIF文です。 if(a1>"", , )の部分 のa1>""は、どういうことですか? よろしくおねがいします。

  • selectの書き方を教えてください

    Oracleで以下のデータから1)、2)の条件でコードをselectしてくるには どのようなSQL文を書けばよいでしょうか。 [DATA] code date status  0001 3-15 A 0001 3-15 B 0001 3-15 C 0002 3-15 A 0002 3-15 B 0003 3-15 B 0004 3-15 A 0005 3-15 C 1)3-15においてstatusがAとBを持つcodeを返したい  →0001,0002が返ってきてほしい 2)3-15においてstatusにCを持つがそれ以外(A,B)は持たないcodeを返したい  →0005が返ってきてほしい 単純なものなのかもしれませんが、 どうか、お力添えのほど、よろしくお願いいたします。

  • SQL文(基礎内容)

    アドバイスお願いします。 Oracle-Ver-8。 基本中の基本の中身になると思いますが、教えてください。こういったことができるのかお願いします。 SQL文の内容ですが、 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ************************************************** SELECT A.商品コード, A.商品名, SUM(DECODE(B.月,1,1月売上,0)) AS 1月, SUM(DECODE(B.月,2,2月売上,0)) AS 2月, SUM(DECODE(B.月,3,3月売上,0)) AS 3月, : : FROM (状態が'ABC'のもの) A GROUP BY A.商品コード,A.商品名 ************************************************* ↑↑↑ このSQLに異なった状態のもの、'DEF'からも項目を追加したい場合、一つのSQLでどのように表現したらよいのでしょうか?可能でしょうか? 例、 ************************************************** SELECT A.商品コード, A.商品名, SUM(DECODE(B.月,13,13,13月売上,0)) AS 13月, SUM(DECODE(A.月,1,1月売上,0)) AS 1月, SUM(DECODE(A.月,2,2月売上,0)) AS 2月, SUM(DECODE(A.月,3,3月売上,0)) AS 3月, : : FROM (状態が'ABC'のもの) A, (状態が'DEF'のもの) B WHERE 結合条件????? GROUP BY A.商品コード,A.商品名 ************************************************* よろしくお願いします。

  • エクセルのIF文

    基本的な質問ですが、 エクセルのIF文で下記の条件式を教えてください。 A1が1ならばB1には普通と表示、2ならば当座、0ならば空白というIF文を作りたいのですが、どのように作れば良いのでしょうか? よろしくお願い致します。

  • エクセルの条件文が長すぎて・・・

    エクセルで合計値を求めるための条件に苦戦しています。 A1が「a」かつA2が「b」の場合B1の数値をZ1に加える。というものですが、 それだけなら =IF(AND(A1=a,A2=b),B1,0) とかで大丈夫だとは思うのですが、 問題は上の条件文で数値を加えるかどうかを判断するB1のようなセルが35個あります。 Z1に=IF(AND(A1=a,A2=b),B1,0)+IF(AND(C1=a,C2=b),D1,0)+ ・・・ なんてしようものなら文が長くなりすぎて条件文が書けなくなってしまいます。 だからといって、他のセルを使うのはレイアウト上避けたいです。 A1、A2、B1などの配置もレイアウト上変えたくはありません。 面倒だとは思いますが、Z1に収まるように上手く出来ないでしょうか? ご指南お願い致します。

  • 【PL/SQL】SQL文が長すぎてSELECTできない

    oracle9iのpl/sqlでSELECT文を発行し 取得したカーソルを返す処理をしています。 where句が動的になる為 実行するSQL文が長くなり ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました のエラーが発生します。 そこで、SQL文の部分をCLOB型にしたり SQL文を「||」でつなげたり してみましたが、どちらもエラーになりました。 長すぎるSQL文を実行するには どうしたらよいでしょうか? 以下ソースです。(左側の数字は行数です) ----------------------------------- 1 PROCEDURE テスト(O_カーソル IN OUT 情報カーソル) IS 2 TYPE curType IS REF CURSOR; 3 tmpCur curType; 4 sqlStr VARCHAR2(32767); 5 6 7 BEGIN 8 9 sqlStr := 'SELECT ' 10 sqlStr := sqlStr || 'A,B ' 11 sqlStr := sqlStr || 'FROM' <<省略>> 12 OPEN tmpCur FOR sqlStr ←エラー発生 13 O_カーソル := tmpCur; --取得したカーソルを返す 14 END テスト; ----------------------------------- (1)SQL文をCLOB型にしてみる:コンパイルエラー 4 sqlStr CLOB (2)SQL文を「||」でつなげてみる:文字列バッファが小さすぎますでエラー Dim sqlStr1 VARCHAR2(32767); Dim sqlStr2 VARCHAR2(32767); Dim sqlStr3 VARCHAR2(32767); <<省略>> 12 OPEN tmpCur FOR (sqlStr1      || sqlStr2      || sqlStr3 <<省略>> )

  • MERGE文について

    以下のようなSQL文を作成し、Oracle10gで実行したところ、正常に実行されていたのですが、同一のSQL文をOracle9iで実行したところ、 ORA-00905: キーワードがありません。 とエラーがでてしまいました。 merge文はOracle9iから追加された?ものだったと記憶しているですが、思い違いでしょうか? それともOracle9i、Oracle10gで何か違いがあるのでしょうか? Oracleのバージョンはそれぞれ以下の通りです。 Oracle10g:10.1.0.2.0 Oracle9i:9.0.1.1.1 よろしくお願い致します。 <やりたいこと> A表のa列とb列が、B表のa列とb列と一致したものレコードのみ、B表のc列の内容にA表のc列をアップデートする。(インサートはしない) merge into 表A A using 表B B on (A.a = B.a and A.b = B.b) when matched then update set A.c = B.c /

専門家に質問してみよう