• 締切済み

C,E,G列の数字を右のように縦一列に並べたいです。ご教授お願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

何度も別質問にも同じような質問をしているが、このことが必要な場面が、小生には想像ができない。 普通は、金や人員や個数などを問題にする、事務系の処理では、現れそうにないが、どんな時にこういうことが必要なのか。研究のため?それを書いておいてくれれば、他の方法を考え、提案してくれる場合もあろう。 ーー こいういう課題は、関数では不得意な分野と思う。なぜなら、直前に見つかった行について、変数にその行番号を記憶できないからだ。 VBAならそういうのは、当たり前のやり方だが。 関数で処理すると、不可能ではないにしても、回答の関数式は、質問者には、理解できないのではないか。 また配列数式による回答が出ても、経験ないだろうから、分かるかな。 VBAでやると、考え方は単純なのだか、質問者には、受け付けないだろうね。 しかし、上記を言うだけでは、と思って、今後の人のためにも(他の人のGoogle照会でも、この質問が出る可能性は多い)、参考に上げておく。 例データ 第5行以下に適当にセルに「●」を入れる。 下記をコピーして、 開発ー挿入ー標準モジュールで出た画面に 貼りつける。 VBAコード Sub test03() Range("m2:q1000").Clear '--結果を出す列のセルの初期設定 c = 13 '結果をL列以右列に出す l = 2 '第2行目から結果を書きだし '-- For j = 1 To 6 Step 1 'データは、A-H列までとする s = 5 'データ処理列での探索範囲の先頭セルは第5行目からとする 'その列で●の数を数える n = Application.WorksheetFunction.CountIf(Range(Cells(1, j), Cells(1000, j)), "●") MsgBox j & "= " & n mr = 5 '今回見つかった、1回前の見つかった行番号 For k = 1 To n 'その列で●の見つかった個数だけ繰り返し r = Application.WorksheetFunction.Match("●", Range(Cells(mr, j), Cells(1000, j)), 0) mr = mr + r MsgBox mr Cells(l, c) = r - 1 l = l + 1 s = mr + 1 Next k c = c + 1 '隣列処理へ l = 2 '第2行目から結果を書きだし Next j '次の列の処理へ End Sub そしてファンクションキーの「F5」(実行キー)を押す。 シートのM,N・・列に数字が出る。 上記では、あえてエクセル関数のよく使うCOUNTIFとMATCH関数を使ってみたもの。 ーー 結果 A B C D E F 1 2 0 4 3 1 0 0 3 3 3 1 5 5 5 5 3 7 4 4 3 3 2 3 - - - - 1 3 A,B・・Fの文字は手抜きで、入力した。 == ここで言いたいことは、上記のVBAコードの中で、「mr」(この名前は特に意味なし)という変数を使って、次の行の処理の時に、●の見つかった、間隔の行間隔数を計算するために、作って、一時保存して、使っていることである。 関数なら、作業列を使うに相当すると思うが、初心者は、過去の経験から、作業列を使わない方法をと所望する。すると回答は、すぐには理解できない複雑な式になるが、コピペしたら、それなりに、答えが出るので、「ありがとう」、で済ませている。

midorichopi
質問者

お礼

失礼しました。回答ありがとうございます。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

作業列を使って…… セルM5に↓の式を入れ、下方向に必要なだけコピー(これが作業列) =IF(C5<>"",MAX(M$4:M4)+1,"") セルI3に↓の式を入れ、下方向に必要なだけコピー =IFERROR(INDEX(C:C,MATCH(ROW(A1),M:M,0)),"") J列、K列用は上記を参考に -- 作業列を使わずにやるなら セルI3に↓の式を入れ、Ctrl+Shit+Enterで配列数式として確定し、下方向にコピー。 =IFERROR(OFFSET(C$1,SMALL(IF($C$5:$C$33<>"",ROW($C$5:$C$33)),ROW(A1))-1,0),"") J、K列の式は上記の式のCをそれぞれE、Gに変更して使用します。 初心者であれば作業列使用の方をお勧めします。

関連するQ&A

  • 連番

    今名簿を作成しています。(4000人分) うまく伝わればいいのですが・・・ 一列目(A列)・・・1から50の数字 二列目(B列)・・・氏名 三列目(C列)・・・51から100の数字 四列目(D列)・・・氏名 五列目(E列)・・・101から150の数字 六列目(F列)・・・氏名 そして 一列目に戻り150から200の数字 三列目201から250の数字 五列目251から300数字 といったようにしていきたいのですが、 一列ずつ連番を入力していくのが面倒なので、もっと簡単にできる仕方があれば教えてください。

  • 勤務表の計算式で困っています

    勤務表で A列に日付 B列に曜日 ---------- Xさん C列 出勤は◎ 休みは空欄 D列 D1=IF(C1=0,"",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") ---------- Yさん E列 出勤は◎ 休みは空欄  F列 F1=IF(E1=0,"",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") ---------- Zさん G列 出勤は◎ 休みは空欄 H列 H1=IF(G1=0,"",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") ---------- といった表での計算式につきまして 日付行の例えば1日(A1行)の出勤が 3名出勤の場合 C1◎E1◎G1◎となり D1F1H1にはそれぞれ「3」と出力 2日(A2行)の出勤が Xさん1名の場合 C2◎ 、E2と G2 は空白となり D2には「1」と出力 F2H2は空白 とさせる場合 D1セルの計算式を =IF(C1=0,"",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") としていますが計算式エラーとなり数字だけ残って表示されてしまう場合があります その場合には下記の式に書き換えると表示が消えることもあるのですが =IF(C1="","",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") 毎回手作業でエラーを見つけて式を入れなおしています 計算式が違うのか根本が間違っているのか改善策をご教授ください ◎自体は別シートの方から参照コピーしております

  • エクセルのセル内数字の分割転記

    またしてもド素人の質問で恐縮ですが、 ある列に桁数の異なる数値が縦に並んで記載されているとき、 セルと同一列の別のセルに、数値を一文字ずつ分割して、下記の様に表示させたいのです。 (G列の数字はすべて右揃えのつもりです)   A B C D E F G 1  5 4 3 2 1   54321 2      1 2 3    123 3        2 2     22 4      6 5 2    652 5          9     9 そこで、A1には、=LEFT(RIGHT($G1,5))、B1には=LEFT(RIGHT($G1,4))、というように、関数を入れておき、1列目はA1からE1まで無事表示できました。 しかし、2列目以降にA1からE1の各セルの式を転記しますと、 1  5 4 3 2 1    54321 2  1 1 1 2 3     123 3  2 2 2 2 2      22 4  6 6 6 5 2     652 5  9 9 9 9 9       9 と、なってしまいました。空白にしたいところに指定セルのトップの数字が入ってしまうんです。指定したセルの数字の桁数よりも大きな部分は空白にしたいのですが、 「もしも何かの条件に合わねば空欄に」というようなことができれば幸いなんですが、どのようにすればいいのかをお教えください。

  • エクセルでの表の作成

    今、エクセルの表で、A1からA100まで、1~100の連続した数字が入っています。C列のC1~C8には、任意の数字を入れます。 その際、C列に在る数字と同じ数字が在るA列のセルの右のセル(B列)に、自動的に○を、無ければ×と表示されるようにしたい、と思います。 次のような形です。  A列      B列       C列    1       ×       3 2          ×        6 3          ○        7 4         × 5         × 6        ○ 7         ○ 8         × 9         × 10         × ・    ・   ・   これを可能にする関数をご教示ください。

  • エクセル 自動的に色づけ

    B列(縦)に数字が入っていたら、自動的にその入ってる数字の横一列が色づくような 方法ってありますか? 宜しくお願いします。

  • 表による体積の計算

       A        B   C   D   E   F   G  H 1          延長 縦1 縦2 縦3 横1 横2 横3 2 四角       3  3        1 3 台形       4  4        2  3 4 四角-四角  5  5   2    4  1 このようなデ-タシ-トを作成することにあたり A列に四角と入力した場合C1、F1のみにセルの移動の仕方を教えてください。 尚、台形及び四角-四角(くりぬき)同様にお願いします。 エクセル2003です。

  • エクセルで色を着けたセルがある表の

    エクセルで色を着けたセルがある表の横一列全部のみを残す方法はありますか。うまく言えませんが、例えばA2、C3、E5、G7、I9のセルが色が着いているとします。1の横一列、4の横一列、6の横一列、8の横一列が削除され、2の横一列、3の横一列、5の横一列、7の横一列、9の横一列のみが残るようにしたいのです。色のついたセルだけを残したいのではありません。色のついたセルがある横一列全部を残したいのです。教えてください。

  • EXCELの表処理についての質問です

    A列に任意の正の値(ここではa~hとおきます。)、B列に1から10までの数字があったとします。 例えば次のように配列しているとします。 A B a 4.7 b 6.6 c 9.0 d 7.5 e 3.5 f 7.3 g 6.3 h 2.2 この時、次の条件でC列に出力したいです。 (1) B列が5以下の時は、C列にはa列の数字*(-1)を出力 (2) B列の値が7以上を維持していて、かつ7を下回った時に、A列の値をそのまま出力 (3) (1),(2)が両方成立している場合(例えば7.2→4.8のように、下回った時に5以下になった場合)は(1)の条件を優先する (4) それ以外は空白を出力 上記の例だと次のように出力したいです。 A B C a 4.7 -4.7 b 6.6 " " c 9.0 " " d 7.5 " " e 3.5 -3.5 f 7.3 " " g 6.3 6.3 h 2.2 -2.2 少し複雑で申し訳ないです。 このような処理は可能でしょうか。どなたか分かる方ご回答よろしくお願い致します。

  • 標準正規分布表に示される数字の名称

    標準正規分布表の中にたくさん書いてある数字(0.4949など)の名称は「累積密度」だと思うのですが、左端の縦一列と上端の横一列の数字(2.507など)の名称は何でしょうか。

  • Excel2003での複雑な表計算、教えてください。

      A  B  C  D  E  F  G  ----------------------------------- 1|  4   6      1.2   4.8   5.6 2| 10   20       0.2  7.2   6.3 上記のような表で、 同じブックの別のシートのA1列より、 A1×E1の解 A1×F1の解 A1×G1の解 A2×E2の解 A2×F2の解 A2×G2の解(以降、A列の行に数字があれば同じように繰り返し) 隣のB列にも同じように、 B1×E1の解・・・というように計算をしていき表をつくりたいのですが、関数ではどうがんばってもうまくいきません。 VBAでやればなんとかできるかと思うのですが、本を読んでもさっぱりわかりません。。。 誰か詳しい方、教えてくだされば幸いです。 説明が足りなければご指摘ください。 よろしくお願いいたします。

専門家に質問してみよう