• 締切済み

エクセルでIF文が長すぎて処理できないのをマクロでは?

部屋割表を作成中。列に日付、行に名前、表中に部屋番号を入力したものを別表(列に部屋番号、行に日付)の表中に名前を反映させる為、計算式=IF(INDEX($B$2:$AF$2,MATCH($A$61,$B$1:$AF$1))=B$61,$A$2&CHAR(10),"")&IF(INDEX($B$3:$AF$3,MATCH($A$61,$B$1:$AF$1))=B$61,$A$3&CHAR(10),"")&~~これを50人分(50行分)入力したいのですが、エクセルでは無理。マクロ初心者ですがお教え下さい。尚、部屋は2人重なる時もあります。

みんなの回答

  • FEX2053
  • ベストアンサー率37% (7988/21361)
回答No.1

マクロなんかにしないで、空いているセルを使って中間結果を書き出した ほうがいいですよ。そのためにシートが物凄く広かったり複数枚あったり するんですから、使わない手はありません。 具体的には、=IF(A1+A2+A3+A4=0,"",A1+A2+A3+A4) という式ならば、 A1001に=A1+A2+A3+A4 としておき、式を =IF(A1001=0,"",A1001) とする・・・とかです。 気になるようなら、1001行目を選択して「書式」「行」「表示しない」 としておけば、外からは見えません。

M420
質問者

お礼

有難うございました。とても助かりました。(^^)v

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel 複数条件一致による文字列取得

    途中まで作成してみましたが、できなかったのでお教え願います。 (1)シート<入力用>に以下のように入力されています。 ┃ ┃A ┃B   ┃C  ┃D     ┃E     ┃  ━━━━━━━━━━━━━━━━━━━━━━━ ┃1┃日付┃社員番号┃休暇等┃業務開始時間┃業務終了時間┃ ┃2┃0926┃11111111┃休  ┃      ┃      ┃ ┃3┃0927┃11111111┃直  ┃8:30    ┃17:30    ┃ ┃4┃0928┃11111111┃   ┃8:30    ┃18:30    ┃ ┃5┃0926┃22222222┃研  ┃8:30    ┃17:30    ┃ といった状態で約120名のランダムなデータがべた打ちされてます。 (2)(1)を以下のような集計表に飛ばしたいのです。   ┃ ┃A   ┃B ┃C ┃D ┃E ┃・・・・・・ ━━━━━━━━━━━━━━━━━━━━━━━ ┃1┃    ┃0926┃0927┃0928┃0929┃・・・・・・ ┃2┃11111111┃休 ┃直 ┃  ┃・・・・・・ ┃3┃22222222┃研 ┃  ┃  ┃・・・・・・ ┃4┃33333333┃・ ┃・ ┃  ┃・・・・・・ ┃5┃44444444┃・ ┃・ ┃  ┃・・・・・・ 行:日付 列:社員番号 飛ばしたい情報は、(1)の<休暇等>文字列です。 ためしに、(2)のB2に以下の式を入れてみました。 B2=index(入力用!A2:E5,match(B1,入力用!A2:A5,0),match(A2,入力用!B2:B5,0)) 当然ですが、日にちが帰ってきました。が、なぜか0927が帰ってきました。 このINDEXとMATCHを利用して(1)のC2:C5にある文字列を拾えないでしょうか? 宜しくお願いいたします。

  • EXCELの貼り付けについて

    EXCELについての質問です。質問がくだらなければ申し訳ございません。 A1のセルに =IF(ISERROR(INDEX(一覧表!B4:B93,MATCH(1,一覧表!G4:G93,0))),"",INDEX(一覧表!B4:B93,MATCH(1,一覧表!G4:G93,0))) を入力しており、 A2セルには =IF(ISERROR(INDEX(一覧表!B4:B93,MATCH(2,一覧表!G4:G93,0))),"",INDEX(一覧表!B4:B93,MATCH(2,一覧表!G4:G93,0))) A3には =IF(ISERROR(INDEX(一覧表!B4:B93,MATCH(3,一覧表!G4:G93,0))),"",INDEX(一覧表!B4:B93,MATCH(3,一覧表!G4:G93,0))) と下へ入力していきたいのです。 貼り付けなどを利用して、簡単に入力できる方法はないでしょうか? お分かりの方、ご教授お願い致します。

  • VBA 検索したセルに入力

    ExcelのVBAを使用して データの入力されたファイルに行列から検索したセルに数値を入力したいのです。 例えば、名前(行)と、日付(列) 2つの条件で、セルを検索し、該当するセルに、データ(数字とか)を 入力したいのです ------------------------------------  6/1 6/2 6/3 6/4 ・・・ a b c ・ ・ ------------------------------------ 例えば、A5に名前、B5に日付、データエリアがB10:Z20の場合 =INDEX(B10:Z20,MATCH(A5,A10:A20,0),MATCH(B5,B9:Z9,0)) で、該当するセルを探すことはできたのですが、 このセルに、データを入力したいときは、 ROWやCOLUMNで、行番号、列番号を取り出して Cellsで、入力すればいいのかな?と考えていますが もっと簡単にできるのでしょうか? (FIND関数は、使ったことがなく、どうなんだろう?と) それでいいよ とか、こっちの方が簡単 とかあれば、教えてください 

  • エクセルの関数組み合わせについて

    エクセルの関数組み合わせでうまくいかず困っています。 (1)あるセルに紙サイズを入力し、別シートにある一覧表行から参照 (2) (1)と同じ行の別セルに部数を入力し、別シートにある一覧表列の以上~未満で参照 (3) (1)と(2)の交差する値を反映。 イメージを添付しました。 以下の式を入れて、サイズと部数から反映できるのですが、以上~未満がうまくいきません。40,000や50,000で入れるとできますが、45,000や47,000などを入れた場合の数式がうまくいきませんでした。 =IF(ISERROR(INDEX(単価表!$B$3:$F$42,MATCH($D6,単価表!$A$3:$A$42,0),MATCH($B6,単価表!$B$2:$F$2,0))),"",(INDEX(単価表!$B$3:$F$42,MATCH($D6,単価表!$A$3:$A$42,0),MATCH($B6,単価表!$B$2:$F$2,0)))) どなたかお力を添えていただければと存じます。 なにとぞよろしくお願いします。

  • エクセルのマクロを知りたい

    エクセルで,たくさんのデータが入力された【シートa】があります。 新しく【シートb】を作成して,そこに空白の表(1)~(10)までを作成します。 (ちなみに表(1)は1行から始まり100行まで,表(2)は101行から始まり200行まで・・・・といった感じです) 【シートb】の表(1)には,【シートa】でA列に「1」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。同様に,表(2)には,【シートa】でA列に「2」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。・・・というのを表(10)まで続けます。 上記のような命令をボタン一つで操作できるようなマクロを教えて欲しいのです。 お願いします。

  • エクセルで一覧表を「縦横」に調べて該当する値を取り出す方法について

    Excel2002を使用しています。 下記のような表を作成し、「MATCH関数」と「INDEX関数」を使用して、該当の値(仮にα値:5.3、距離700とします)を取り出そうとしているのですが、エラーになってしまいます。 A B C D 1 3.4 3.5 3.6  2 700 30.0 30.4 30.7 3 750 31.1 31.6 31.9     4 800 32.3 32.8 33.2 5 6 α値 5.3     7 距離 700   この表から、行番号、列番号を出すために、以下の関数式を使っています。     行番号:=MATCH(B6,B1:D1)     列番号:=MATCH(B7,A2:A4)  最後に、「INDEX関数」で該当の値を取り出したいのですが、この「INDEX関数」の結果が「#REF!」になってしまいます。関数式は   =INDEX(B2:D4,D6,D7) ちなみに、D6には、行番号の関数式が、D7には、列番号の関数式が入っています。 このエラーを解消したいのですが、どなたか知恵を貸していただけませんでしょうか。よろしくお願いします。

  • エクセルのIF式を教えて下さい!

    いつもお世話になっています。 さて、今回の質問は、エクセルの同じブック内で別々のシートでおこなう質問です。 質問内容 シートAには、A列からD列の表があります。 シートBには、A列B列の表を作成。 シートBのA列にシートAのA列を選択させる。IF式? シートBのB列にシートAの選択したA列と同じ行のD列のセル結果を表示させたい。IF式? 以上の作業させる為のIF式を教えて下さい。 ちなみに、同じシート上での場合のIF式(INDEXとMACTH)の使い方は、分かるのですが、シートが変わった場合が良く分かりません。 宜しくお願い致します。

  • エクセルのIF関数について

    エクセルのIF関数について質問をさせて頂きます。 現在、下記のような条件で抽出できる式を考えているのですが、 中々思うような式が思い浮かびません。 例えば、     A列  B列  C列  D列 1行目  111 2行目  222 3行目  333 4行目  444 5行目  555 6行目  666 7行目  777 8行目  888 9行目  999 上記のようなシートがあったとして、     A列  B列  C列  D列 1行目  111       999 2行目  222       333 3行目  333   ○   123   × 4行目  444 5行目  555 6行目  666 7行目  777 8行目  888 9行目  999   ○ 上記のように、例として C列の1行目に「999」と入力した場合、A列の9行目に「999」の数字があるので、その横のB列に「○」 C列の2行目に「333」と入力した場合、A列の3行目に「333」の数字があるので、その横のB列に「○」 C列の3行目に「123」と入力した場合、どこにも該当番号がないので、入力したC列の横、即ちD列の3行目に「×」を表示 要は、A列のどこかに該当数字があった場合にはその数字の横(B列)に「○」、どこにも該当数字が無い時には、入力した数字の横、D列に「×」を表示するような数式を考えています。 IF関数を使えばできるような気がするのですが、色々と試してみても中々うまくいきません。 下手な説明で分かり辛いかもしれませんが、どなたかご存知の方がいましたら、ご教授の程頂ければ幸いです。 どうぞ宜しくお願い致します。

  • ExcelセルにVBAでINDEX関数を入力

    ExcelでINDEX関数とMATCH関数で"B11:E13"セルに以下の数式データがあります。 数式は "B11"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(1,B$15:B$23,0))) "B12"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(2,B$15:B$23,0))) "B13"=IF(ISERROR(INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(3,B$15:B$23,0))) "C11"==IF(ISERROR(INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))),"",INDEX($A$1:$A$9,MATCH(1,C$15:C$23,0))) "B15~B23"に数値1~3を入力した場合イニシャルA~I が入力される式ですが、列を連続で入力できるような処理をVBAのWorksheetFunctionで行うにはどのようにコードを記述すればよいのでしょうか。 ご回答のほどよろしくお願いします。

  • Excelマクロ、特定行の削除

    A列に日付か文字のどちらかが入力してある表があります。  A列(日付文字) B列(時刻) C列以下(その他データ ) 日付は全て同じ日付(11月11日なら全部これ)で、文字も全て同じ文字です。 日付またはB列が時刻(さまざまな数値)の行を削除して、A列が文字の行だけ残したいのです。 Range("2:2").Select Selection.Delete Shift:=xlUp これを表範囲で繰り返すのはわかります。 "2:2"の所に変数を用いると思いますが、変数に日付の行を指定したりするコードが分かりません。 A列が文字の行を検索し、それ以外の行を削除でもよいのですよね。 よろしくお願いします。

このQ&Aのポイント
  • MFC-J960DNのコピーで白紙が出力される問題について、修理以外の解決方法を探しています。
  • 以前印刷をしていたが、久々にインクカートリッジを交換後、白紙で出力される問題が発生しました。
  • 説明書通りにクリーニングも試しましたが、改善されないため、修理以外の対策を求めています。
回答を見る