何から考えていいのか分かりません・・。
Excel200で下記のような表があります。
ID 顧客名 サービス1 サービス2 サービス3・・・・
─────────────────────────
**** AAA 0 0 0
**** BBB 0 0 11
**** CCC 1 16 0
**** DDD 0 0 3
・ ・ ・ ・ ・
・ ・ ・ ・ ・
・ ・ ・ ・ ・
この表からデータが0でないものをピックアップし、
次のような一覧を作成したいのです
顧客名 サービス名 件数
─────────────
BBB サービス3 11
CCC サービス1 1
CCC サービス2 16
DDD サービス3 3
こういったことは可能なのでしょうか?
過去のものも見てみたのですが、うまく合致するものを探せず、
Excelの関数のヘルプを見ても、よくわからず、困ってしまいました。
関数は多少使ったことがありますが、
マクロは使ったことがありません。
ご指導いただける方がいらっしゃいましたらどうぞ宜しくお願い致します。
No.6ベストアンサー
- 回答日時:
関数でもできそうですが、マクロのほうがはるかに簡単にできます。
Sheet1が下のようになっており、
A B C D E ・・・
1 ID 顧客名 サービス1 サービス2 サービス3 ・・・
2 **** AAA 0 0 0
3 **** BBB 0 0 11
4 **** CCC 1 16 0
5 **** DDD 0 0 3 ・・・
これをSheet2に次のように集計してみます。(2行目から集計)
A B C
1 顧客名 サービス名 件数
2 BBB サービス3 11
3 CCC サービス1 1
4 CCC サービス2 16
5 DDD サービス3 3
ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示します。
プロジェクトエクスプローラのSheet1をダブルクリック。出てきたコードウインドウに下記マクロをコピーして貼り付けます。
シートに戻り、ツール→マクロ→マクロでこのマクロ(ichiran)を指定して実行します。
ここからコピーします
↓
Sub ichiran()
Dim rw As Long '調べる行
Dim col As Integer '調べる列
Dim outRw As Long '書き出す行
outRw = 2
With Worksheets("Sheet2")
.Cells.Clear
.Range("A1:C1") = Array("ID", "サービス名", "件数")
For rw = 2 To Range("B65536").End(xlUp).Row
For col = 3 To Range("IV" & rw).End(xlToLeft).Column
If Cells(rw, col).Value > 0 Then
.Cells(outRw, 1) = Cells(rw, 2)
.Cells(outRw, 2) = Cells(1, col)
.Cells(outRw, 3) = Cells(rw, col).Value
outRw = outRw + 1
End If
Next
Next
End With
End Sub
ありがとうございました!!!
感動しました。
ご指導頂いた通り、作業させていただき、マクロを実行したら「感動!!」。
欲しかった一覧表が出来あがってました。
マクロを全く自分でくんだことがないので、作っていただいたマクロを一つ一つ拝見しながら、
勉強させていただきたいと思います。
本当にありがとうございました。
No.5
- 回答日時:
#4のものです。
1つのデータ列だけ持ったデータに直し方を紹介します。
テストデータとしてA1:E6に
1AAA000
2BBB0011
3CCC1160
4DDD003
5EEE3100
6FFF0230
を用意してください。
G1:I18までの範囲に展開します。
下記関数式で3が出てくるのは
このテスト例ではデータ列をC、D、E列の3で作っているからです。MODは割ったあまり、INTは商、ROW
は自分の行数字です。INDEXは行、列数字を指定してそのセルの値を取ってくる関数です。詳しくは調べてください。$は絶対番地です、落とさないように。
(1)G1に入れる式--->
=INDEX($A$1:$E$6,INT((ROW()-1)/3)+1,1)
(2)H1に入れる式--->
=INDEX($A$1:$E$6,INT((ROW()-1)/3)+1,2)
(3)I1に入れる式--->
INDEX($A$1:$E$6,INT((ROW()-1)/3)+1,MOD(ROW()-1,3)+3)
(4)G2:G18までG1を複写してください。
H2:H18までH1を複写してください。
I2:I18までI1を複写してください。
「18」は6行Xデータ列3=18からきます。
結果は
1AAA0
1AAA0
1AAA0
2BBB0
2BBB0
2BBB11
3CCC1
3CCC16
3CCC0
4DDD0
4DDD0
4DDD3
以下略。のようになります。
これでC列0をフィルタでかけて省きましょう。
●本件は#4で関数式で出来ないと言ったことと矛盾しませんのでよろしく。
(1)規則性があった(利用した)こと。データセルは各行3列あるのでこれを幸い使ったもの。
(2)手操作のフィルタ操作(データ-フィルタ-オートフィルタまたはフィルタオプション)を使っていること。
がある問題なので解決したわけです。
No.4
- 回答日時:
●VBA(マクロ)でないと無理でしょう。
あるいは手操作で一歩一歩やるとか。それにしてもノンゼロの列数分を行数分に増やすのはどうするか難しそう。いっそのこと0も含めて、セル分だけ行を増やし、0分を
フィルタにかけるとかどうでしょう。
●もとの表(元表)に比べ目的の表(目的表)は例えばCCCだけ見ると行数が増えています。
こういう風に場合に応じた数だけの行挿入をしなくてはならない問題は、関数では難しいと思います。
また3列がすべて0のとき、自分自身の行を削除するのも関数で出来ません(不可能といいたいが、工夫した回答が出るかもしれないので控えめに。)
●関数はまたセルのデータを見て判断する(そして演算に使う)は自由に出来ますが、あるセル(例えばA1セル)に関数式を書いて、他のセル(例えばA1とは別のC1セル)にデータをセットできません。データをセットしたいセルに式を書かないといけません。ピックアップ後の「目的表」の例えば第3行目にデータを入れるとします。関数式をいれないと、「元表」からデータを持ってこれませんので式をいれようしますが、その時「元表」の何行目・何列目をもってくるのかが関数式で書けない(正確には複写できるようにかけない)のです。
人間が、目的表に
(A列)(B列)(C列)
=B4 =E1 =E4
=B5 =C1 =C5
=B5 =D1 =D5
=B6 =E1 =E6
・・・
と人間が目で見て勘定して案配していれていけば完成しますがそれは目指すものではない。
この列文字部分と行数字部分を目的表のデータ部の第1行目(各列で別になってもでも良いが)に作ることができれば、第2行以下は複写すれば良いのですが、そういう式を作ることが出来ません。
●VBAでやるとすると、
ID+顧客名+1つのセルデータの形に、データ部の全セルについて行い、セル部データが、0のものを捨てれば良いから処理は簡単です。下記のように骨子は15行ぐらいです。Sheet2に出来あがります。
Sub test01()
d = Range("a1").CurrentRegion.Rows.Count
r = Range("a1").CurrentRegion.Columns.Count
k = 1
For i = 1 To d
For j = 3 To r
If Cells(i, j) <> 0 Then
Worksheets("sheet2").Cells(k, 1) = Cells(i, 1)
Worksheets("sheet2").Cells(k, 2) = Cells(i, 2)
Worksheets("sheet2").Cells(k, 3) = Cells(i, j)
k = k + 1
End If
Next j
Next i
End Sub
No.3
- 回答日時:
関数、ではなく「オートフィルタ」を使うのはいかがでしょうか?
エクセル上の「データ」→「フィルタ」→「オートフィルタ」があります。
1行目の欄にカーソルがあるのを確認し、これをクリックすると、
各列毎の右側に黒三角▼が表示されます。
それをクリックして抽出するのはどうでしょうか?
例えば サービス1の所で「オプション」を選び「0と等しくない」という条件を
入れると、サービス1に「0」以外の数字が入っているものだけが抽出されます。
それで閲覧だけならできますよ。
そこから、更に別の表を作成する場合は別のシートにコピーする必要がありますが。
この回答への補足
ありがとうございます。
ご指導頂いた通り、確かに「オートフィルタ」を利用すると、
各サービスの欲しい結果だけ表示させることができるのですが、
>それで閲覧だけならできますよ。
>そこから、更に別の表を作成する場合は別のシートにコピーする必要がありますが。
まさにそこで悩んでいるんです。(T_T)
サービス1、サービス2・・・と仮定した項目が16個もあり、
しかも毎月発生する作業なので、できるだけ短時間で作業できるようにしたいと思っている次第です。
No.1
- 回答日時:
マクロを使わないとして、こんな手法ではいかがでしょうか。
1)データ範囲を選択します。(例=B2:E100)
2)0を"完全に同一なセル"を指定して空白に一括置換します。
3)データ範囲を選択し、[編集]-[ジャンプ]-[セル選択] から、空白セルを指定します。
4)[編集]-[削除] から、右方向にシフトを指定して実行します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- その他(開発・運用・管理) マイクロソフトから通知メールが着ました。 これ本物ですか?? 3 2022/07/01 19:43
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- スーパー・コンビニ コンビニエンスストアって便利なの? 9 2022/04/29 18:28
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
EXCEL:ゼロ以外のデータを詰めて抽出する方法
Excel(エクセル)
-
【エクセル】関数で「A1が0でないならB1を表示」の式
その他(コンピューター・テクノロジー)
-
エクセルで特定の列が0表示の場合、その行を非表示にしたい
Excel(エクセル)
-
-
4
エクセルで入力のあるセルのみ別シートに表示したい
Excel(エクセル)
-
5
エクセルで左から、最初に0より大きい値を抽出したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access レポート印刷するときに...
-
access2021 強制終了してしまう
-
Accessのスプレッドシートエク...
-
ACCESS VBA でのエラー解決の根...
-
Access VBA [リモートサーバー...
-
Accessのクエリで、replace関数...
-
Access DLookup vbaで条件を2件...
-
access2021 VBA メソッドまたは...
-
アクセスの更新クエリでカレン...
-
Access 登録ボタンからサブフォ...
-
1月2日より、いまだアクセスで...
-
Accessで選択クエリを作成中で...
-
Access Error3061 パラメータが...
-
アクセス where句を使用して複...
-
【アクセス】レポート テキスト...
-
VBA。リストボックスの値を別の...
-
【Access】Dcount関数の複数条...
-
Accessレポートのチェックボッ...
-
Accessでフォームに自動入力し...
-
access2019の起動が遅い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access レポート印刷するときに...
-
access2021 強制終了してしまう
-
ACCESS VBA でのエラー解決の根...
-
Accessのクエリで、replace関数...
-
access2021 VBA メソッドまたは...
-
accessデータを指定したExcel、...
-
Accessレポートのチェックボッ...
-
[Access VBA]画像リサイズした...
-
Accessのスプレッドシートエク...
-
実行時エラー3131 FROM 句の構...
-
Microsoft365にAccessってあり...
-
Access Error3061 パラメータが...
-
access2019の起動が遅い
-
【Access】Dcount関数の複数条...
-
Access 複数条件検索の設定が上...
-
Accessのリンクテーブルのパス...
-
チェックボックスにチェックが...
-
Access VBA [リモートサーバー...
-
access クエリ yes/no型のクエ...
-
Access で半角スペースと全角ス...
おすすめ情報