下の表を数式で右(G)のように並べ替えたいのですがご教授お願い致します。

A  B  C         G
1  0  0         1
2  0  0         2
3  1  a         a
4  0  0         3
5  1  b         4
6  0  0         b
7  0  0         5
8  0  0         6
9  1  c         7
10  0  0         8
-------------------------------- c
-------------------------------- 9
-------------------------------- 10

どうしても4の処で引っかかってしまいます。
よろしくお願いいたします。
------- はG列が左に寄ってしまうので書いてます。
無視して結構です。

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

A 回答 (4件)

ん?…


こちらではきちんと並んだのですが…

D列は上から順に1,2,4,5,7,8,9,10,12,13と表示されてますでしょうか?

G列の
=IF(COUNTIF(AD:AD,ROW())=0,INDIRECT("AC"&MATCH(ROW()-1,AD:AD,FALSE)+1),MATCH(ROW(),AD:AD,FALSE))
は入力ミスなく一致していますね?
aが入力されているのはC3、bはC5、cはC9で、その左は1、B・C列の他の行は0、A列は行番号ですね?

とりあえず中身を分解して確認してみましょう。
表示のずれている3行目の、どの列でもいいので、次の式を入力して、それぞれに表示されるものを教えてください。

=COUNTIF(D:D,ROW())
これはD列にその行番号が含まれている数を算出しています。3は含まれていないハズですので0であれば正解です。

=MATCH(ROW()-1,D:D,FALSE)
これは1つ上の行の行番号がD列の何行目にあるかを表示させる式です。
2行目の2なのでD2で一致し、2が表示されれば正解です。

=INDIRECT("C"&MATCH(ROW()-1,D:D,FALSE)+1)
これは先ほどの2に1を加えて3とし、C3のデータを表示させるものです。
C3はaであるので、aが正解です。

=MATCH(ROW(),D:D,FALSE)
これはCOUNTIFが0でなかった場合の式です。
なので確認する必要はないと思いますが、
そのセルの行番号をD列で検索し、何行目にあるかを表示します。
3はD列にないはずなので、エラーが正解です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
表が1つずつ下がっていました。
上げたら順番通りに並びました。

感激です。
あとは実務に合わせて改良するだけです。

本当にありがとうございました。

お礼日時:2017/04/15 14:38

失礼しました。

説明のみでD列の式が書けていませんでしたね。

D1=ROW()+SUM(B$1:B1)
これを2行目~データのある一番下の行までコピーします。
D列が使えない場合は、好きな列に変更し、
↓の式の3つの『D:D』を、その列に変更してください。

G1=IF(COUNTIF(D:D,ROW())=0,INDIRECT("C"&MATCH(ROW()-1,D:D,FALSE)+1),MATCH(ROW(),D:D,FALSE))
これを2行目~『A列のデータの数+C列の0でないデータの数』行目までコピーします。
具体的に何行目まで必要かは『=MAX(A:A)+SUM(B:B)』とどこかのセルに入力すればわかります。
    • good
    • 0
この回答へのお礼

たびたび、ありがとうございます。
ご指示通りDとGにコピーしたのですが
どうしても3とaの3の方が先に来て3の次にa
となってしまいます。
123a45b・・・
aを先にして
12a34b5・・・
としたいのですが。。

なんか胃が痛くなってきました。(T_T)

お礼日時:2017/04/15 13:00

こんばんは!



規則性がよく判らないのですが・・・
お示しの配置通りになるようにやってみました。
VBAでの一例です。

Sub Sample1()
Dim i As Long, c As Range
Range("A:A").Copy Range("G1")
For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
If Cells(i, "B") <> 0 Then
Set c = Range("G:G").Find(what:=Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
c.Insert shift:=xlDown
c.Offset(-1) = Cells(i, "C")
End If
Next i
End Sub

※ マクロを実行すると
とりあえず質問文通りの配置になると思います。m(_ _)m
    • good
    • 0
この回答へのお礼

うーん・・・

凄いですね。
ボタンに張り付けて実行したんですが完璧です。
BC列を上下させて変更しても対応出来ています。
ただ、マクロではワンクリックいるので数式でお願いしたいです。
実務ではもっとややこしいので参考にしながら変更しようと思っているものですから。
今の私ではマクロをいじれません。
お宝を前に恐縮です。

お礼日時:2017/04/15 01:34

ぱっと見でどういう並べ方をしたいのかが分かりにくいですが、


C列が0以外の場合はB列が1になっていて、
A列は行番号が表示されている、
G列には、C列に0以外のデータがあった場合に、
「その行の行番号と、その1つ前の行番号の間」にC列のデータを挟み、
上から順に並べたい。
ということでよろしいでしょうか?

D列を作業用として説明します。
D列が他のデータなどで使えない場合は、H列でもZ列でも空いている列に置き換えてください。
D列に、その行の行番号をG列の何行目に表示させたいのかを表示させましょう。
具体的には、その行の行番号に、その行までのB列の合計を足せばいいですね。
(5行目であれば5+2で7、G列の7行目が5ですね)

そして、G列では、そのセルの行番号がD列にあった場合、それが何行目であるかを、
D列になかった場合は、その上のセルの行番号があった行の1つ下の行のC列のデータを、
それぞれ表示すればいいわけです。
C列にデータが連続であったとしても、必ず間に行番号を挟むハズなので。

=IF(COUNTIF(D:D,ROW())=0,INDIRECT("C"&MATCH(ROW()-1,D:D,FALSE)+1),MATCH(ROW(),D:D,FALSE))
先ほど説明した内容を式にしたものです。
"C"&MATCH(ROW()-1,D:D,FALSE)+1 の部分は
"C"&『1つ上のセル』+1 (『1つ上のセル』はセル番地で指定。G2に入力する式であればG1)
としたいところですが、1行目にもデータがあるようなので、
(0行目のセルを指定できないため)1行目だけ式を変換させる必要が生じ、
式を統一するために、あえて同じ内容の式を作り直しています。
(ROW()は入力したセルの行番号を取得するので、-1を加えています)

そのセルの行番号で、対象行全体を検索する式になっていますので、G列全ての式が上記の式そのままとなります。
    • good
    • 0
この回答へのお礼

うーん・・・

早速のご返答ありがとうございます。
優しい文章であるにも関わらず私にはよくわからず只今どうすればいいのか四苦八苦しております。
理解するのに時間がかかります。
もう少しお待ちください。

お礼日時:2017/04/15 01:22

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

このQ&Aを見た人はこんなQ&Aも見ています

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

Qエクセルについてなのですが、 例えば指定の範囲内に A B B C A B C A B B C D

エクセルについてなのですが、

例えば指定の範囲内に
A B B C A B C A B B C D B D
と並んだセルからAとDの合計を出したい時はどのようにすればいいのですか?

COUNTIFSだったら複数条件を満たした数を表示するので希望とは違います。
希望はA or Dの合計を出したいのです。

Aベストアンサー

こんにちは!

COUNTIFS関数はAND条件になりますので、今回の質問には適しません。

=COUNTIF(範囲,"A")+COUNTIF(範囲,"D")
のように「A」のセル数と「D」のセル数をコツコツと足し算するのが
間違いないと思います。m(_ _)m

QSUMPRODUCT($A$1:$A$10,$B$1:$B$10)とSUMPRODUCT($A$1:$A$10*$B$1:$B$10)

エクセルのSUMPRODUCT関数についてお尋ねします。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)
の違いは何でしょうか?
両者とも同じ答えを返しますが、いろいろ試したところ、前者は範囲内に文字列があってもそれを無視して計算し、後者は文字列があればエラーになるようですが、その理解で正しいでしょうか?
正しいとすれば、なぜでしょうか?

Aベストアンサー

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算するように出来ています。最初、SUM関数に対し、そのように作られました。プログラムとしては、初歩的なものですが、そのアイデアは、今日まで、踏襲しているようです。このオリジナルの仕組みを考えたのは、VisiCalc の開発者、ブルックリン氏です。昔々、本で読んだことがあります。 PRODUCT関数とも共通です。3つの関数は、同じような仕様を持っています。

こちらが、本来の使い方です。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

つまり、
$A$1:$A$10 と $B$1:$B$10 の値を別々に取得しています。

では、
=SUMPRODUCT($A$1:$A$10,$B$1:$B$11)

とすると、なぜ、エラーが出るかというと、$B$11 に対応する数値が、NULL値(有効な値がない)だからです。それは、全体に反映させてしまいます。(理由は分かると思いますが、プログラムが途中で、エラーで止まってしまうからです)

ところが、こちらは、

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)

$A$1:$A$10*$B$1:$B$10 は、分割出来ません。したがって、この数式の中でのエラーは、そのまま、元の数式に反映されます。

ご自分で、ユーザー定義関数を作ってみれば分かります。VBAでも、同じように作ることが可能です。一度、試してみるとよいです。

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算...続きを読む

Q=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

Q質問番号C1 C2 C3 C4 C5 C6 C7 C8 C9 平均

質問番号C1 C2 C3 C4 C5 C6 C7 C8 C9 平均
       1 1 2 3 4 5 3 8 7 5 4.2
エクセル2003でこのような質問表を作っています。
条件付書式で、一番大きい数と、一番小さい数に色をつけたいのですが、
そのような条件が見当たりません。
どうすればいいのでしょうか?
また、2007ならば可能なのでしょうか?

Aベストアンサー

条件付書式で、
「セルの値が」―「次の値に等しい」―「=MIN($C$1:$C$9)」
で、「書式設定」で色選択、
「追加」
「セルの値が」―「次の値に等しい」―「=MAX($C$1:$C$9)」
で、「書式設定」で色選択、
「OK」

QA1に数字の1を入力するとB1の値がA1に表示、A2に数字の2を入力するとB2の値がA2に表示

エクセル初心者です

セルのA1に数字の1を入力するとB1の値がA1に表示、A2に数字の2を入力するとB2の値がA2に表示されるようなものを作りたいのですが・・・
どなたかご教授お願いします

例えば、A1に1を入れるとB1の値"北海道"がA1に表示され、A2に2を入れるとB2の値"青森"がA2に表示といった感じでです

宜しくお願いいたします

Aベストアンサー

No3,5,6です。
補足要求をしましたが時間がないので、No6での以下の理解、

B4がROOT,C4が♭9,D4が9,E4がm3,F4がM3~M4がM7
置き換え対象はB6:W11の範囲

ということでいいのなら以下で出来ます。

1.シートのタブを右クリックし、コードの表示を選択
2.出てきたVBエディター(白い画面)に下記をコピペ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x
If Intersect(Target, Range("B6:W11")) Is Nothing Then Exit Sub
x = Target.Value
Application.EnableEvents = False
Target.Value = Range("A4").Offset(0, x)
Application.EnableEvents = True
End Sub

3.AltキーとF11キーを一緒に押してワークシートへもどります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報