• 締切済み

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

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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答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