- 締切済み
エクセルについて
こんばんは。 いつも質問ばかりでごめんなさい。 ちょっとお聞きしたいのですが下記のような表があるとします。 カードの方のみの名前と金額を別のセル(または別シート)に表示させたいのですがどのようにしたらよろしいのでしょうか? 日付 名前 現金 カード 2/5 田中 12000 2/5 佐藤 18000 2/5 鈴木 32000 2/5 木村 25000 2/5 山田 22000 ↓このようにしたいのですが。 カード決済 日付 名前 金額 2/5 鈴木 32000 2/5 山田 22000 お手数おかけしますがよろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 こんな感じで考えてみました。 G H I 日付 名前 カード G2:~ 必要なだけ下へドラッグコピー =IF(COUNTA($D$1:$D$100)>ROW(A1),INDEX($A$1:$D$100,SMALL(INDEX(($D$1:$D$100<>"")*ROW($A$1:$A$100),,),ROWS($D$1:$D$100)-COUNTA($D$1:$D$100)+ROW(A1)+1),1),"") H2:~ =IF(COUNTA($D$1:$D$100)>ROW(A1),INDEX($A$1:$D$100,SMALL(INDEX(($D$1:$D$100<>"")*ROW($A$1:$A$100),,),ROWS($D$1:$D$100)-COUNTA($D$1:$D$100)+ROW(A1)+1),2),"") I2:~ =IF(COUNTA($D$1:$D$100)>ROW(A1),INDEX($A$1:$D$100,SMALL(INDEX(($D$1:$D$100<>"")*ROW($A$1:$A$100),,),ROWS($D$1:$D$100)-COUNTA($D$1:$D$100)+ROW(A1)+1),4),"") 範囲の変更は、置換したほうが早いですが、ROW() の中は、範囲の幅は同じでも、必ず、$A$1 からスタートしないといけません。 別のシートに移すときは、最初に、同じシートで試して、それをAlt + 範囲選択で、ドラッグして、別のシートに持っていくと良いです。ただ、あまり大きな範囲ですと、マクロのほうが軽いです。
- imogasi
- ベストアンサー率27% (4737/17069)
実例を質問に書いたのは良いが、その背景の意図を文章で説明しないものだから、あいまいだ。必ず両方あわせて説明すること。 ーー D列で数字の入った人がカード決裁者でそれだけを別シート?に抜き出す、という課題なのか? 今まで毎日関数での質問が出るが、それならエクセルは関数では苦手な課題なんだよ。 VBAで希望らしいが、VBAという言葉は質問に出てない。 VBAでなら、なんと言うこともない課題です。 最初行から最終行まで見て行って、D列が空白でなければ、Sheet2に書き出せばよい。 ーーー Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") k = 2 '-- d = sh1.Range("A65536").End(xlUp).Row MsgBox d For i = 2 To d If sh1.Cells(i, "D") <> "" Then sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(i, "B") sh2.Cells(k, "C") = sh1.Cells(i, "D") k = k + 1 End If Next i End Sub ーー Sheet2の 第1行の見出しと A列の日付書式設定は 手作業に残した。
お礼
ありがとうございます。 できました。 「D列で数字の入った人がカード決裁者でそれだけを別シート?に抜き出す、という課題なのか?」その通りです。 関数でもVBAでも結果が同じならどちらでも良かったのであいまいな質問になってしまって申し訳ありませんでした。 これからは気をつけます。
- higekuman
- ベストアンサー率19% (195/979)
マクロでやるのであれば、こんな感じになると思います。 実際に検証はしていないので、動くかどうかは保証できません。 あくまでもこんな感じ、というだけです。 ただ、マクロをまったく知らない人にこれを説明するのは面倒なので、説明はしません。 マクロとしては基本的なことしかやっていないので、これをきっかけに勉強してはいかがでしょうか。 Dim s1 As Worksheet, s2 As Worksheet Set s1 = Worksheets("Sheet1") Set s1 = Worksheets("Sheet2") Dim row1 As Long, row2 As Long row1 = 2 row2 = 2 Do Until s1.Cells(row1, 1).Value = "" If s1.Cells(row1, 4).Value <> "" Then s2.Cells(row2, 1) = s1.Cells(row1, 1) s2.Cells(row2, 2) = s1.Cells(row1, 2) s2.Cells(row2, 3) = s1.Cells(row1, 4) row2 = row2 + 1 End If row1 = row1 + 1 Loop
お礼
ありがとうございます。 テストしてみましたがシート2の方にうまく抜き出せなかったので、どこがいけないのか勉強させていただきます。
A B C D E F G H 1 日付 名前 現金 カード カード決済 2 2/5 田中 12000 日付 名前 金額 3 2/5 佐藤 18000 2/5 鈴木 32000 4 2/5 鈴木 32000 2/5 山田 22000 5 2/5 木村 25000 6 2/5 山田 22000 7 0.範囲 A1:D100 を選択して、[挿入]→[名前]→[作成]を実行後、“上端行”の みにチェックを入れて[OK]をクリック 1.セル D1 をセル F1 にコピー&ペースト 2.セル F1 を“ユーザー定義”で @"決済" と書式設定 3.範囲 F3:H3 に対して次の[条件付き書式]を設定 数式が =ISERROR(F3) フォント色 白 4.セル F3 に次の配列数式を入力して、此れをセル G3、H3 にコピー&ペースト {=INDEX(INDIRECT(F$2),SMALL(IF(カード="","",ROW(カード)),ROW(A1))-1)} 5.セル H3 の式中の G$2 を F$1 に書き替えて、次式とする {=INDEX(INDIRECT(F$1),SMALL(IF(カード="","",ROW(カード)),ROW(C1))-1)} 6.範囲 F3:H3 を下方にズズーッとドラッグ&ペースト
お礼
ありがとうございます。 0番の[挿入]→[名前]→[作成]を実行後、“上端行”のみにチェックを入れて[OK]をクリック」というところがエクセル2007なのですが見あたらず、1~6をやったらどうなるかと思いましたところ、全て空白ができてしまいうまくいきませんでした。 せっかく教えていただいたのにすいませんでした。
- YSNR-HRN
- ベストアンサー率36% (40/111)
カードの方のみの名前と金額を別のセル(または別シート)に表示させたいのが日に1回ぐらいなら、手作業で別シートにコピーし並べ替え等を使って削除すべき列をまとめて不要なデータを行削除する。 カード列に金額が入力されればリアルタイムに自動的にというのであれば、マクロになると思います。
お礼
ありがとうございます。 できればマクロの自動的に映し出す方法をできれば教えていただきたいです。 お手数おかけしますがよろしくお願いいたします。
お礼
こんにちは。 ありがとうございます。 関数の方は自分なりにいろいろ試してみたのですがどうもうまくいきませんでした。結局、質問にたよってしまいました。 いま、試してみたところうまくいきました。 いろいろと勉強になります。 これからの参考にさせていただきます。