重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

こんばんは。
いつも質問ばかりでごめんなさい。
ちょっとお聞きしたいのですが下記のような表があるとします。
カードの方のみの名前と金額を別のセル(または別シート)に表示させたいのですがどのようにしたらよろしいのでしょうか?

日付 名前  現金  カード
2/5  田中  12000
2/5  佐藤  18000
2/5  鈴木       32000
2/5  木村  25000
2/5  山田       22000

↓このようにしたいのですが。

カード決済
日付 名前  金額
2/5  鈴木  32000
2/5  山田  22000

お手数おかけしますがよろしくお願いいたします。

A 回答 (5件)

こんにちは。



こんな感じで考えてみました。

 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 + 範囲選択で、ドラッグして、別のシートに持っていくと良いです。ただ、あまり大きな範囲ですと、マクロのほうが軽いです。
    • good
    • 0
この回答へのお礼

こんにちは。
ありがとうございます。
関数の方は自分なりにいろいろ試してみたのですがどうもうまくいきませんでした。結局、質問にたよってしまいました。
いま、試してみたところうまくいきました。
いろいろと勉強になります。
これからの参考にさせていただきます。

お礼日時:2008/02/06 13:41

実例を質問に書いたのは良いが、その背景の意図を文章で説明しないものだから、あいまいだ。

必ず両方あわせて説明すること。
ーー
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列の日付書式設定は
手作業に残した。
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました。
「D列で数字の入った人がカード決裁者でそれだけを別シート?に抜き出す、という課題なのか?」その通りです。
関数でもVBAでも結果が同じならどちらでも良かったのであいまいな質問になってしまって申し訳ありませんでした。
これからは気をつけます。

お礼日時:2008/02/06 10:47

マクロでやるのであれば、こんな感じになると思います。


実際に検証はしていないので、動くかどうかは保証できません。
あくまでもこんな感じ、というだけです。
ただ、マクロをまったく知らない人にこれを説明するのは面倒なので、説明はしません。
マクロとしては基本的なことしかやっていないので、これをきっかけに勉強してはいかがでしょうか。

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
    • good
    • 0
この回答へのお礼

ありがとうございます。
テストしてみましたがシート2の方にうまく抜き出せなかったので、どこがいけないのか勉強させていただきます。

お礼日時:2008/02/06 11:01

  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 を下方にズズーッとドラッグ&ペースト
    • good
    • 0
この回答へのお礼

ありがとうございます。
0番の[挿入]→[名前]→[作成]を実行後、“上端行”のみにチェックを入れて[OK]をクリック」というところがエクセル2007なのですが見あたらず、1~6をやったらどうなるかと思いましたところ、全て空白ができてしまいうまくいきませんでした。
せっかく教えていただいたのにすいませんでした。

お礼日時:2008/02/06 10:56

カードの方のみの名前と金額を別のセル(または別シート)に表示させたいのが日に1回ぐらいなら、手作業で別シートにコピーし並べ替え等を使って削除すべき列をまとめて不要なデータを行削除する。


カード列に金額が入力されればリアルタイムに自動的にというのであれば、マクロになると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
できればマクロの自動的に映し出す方法をできれば教えていただきたいです。

お手数おかけしますがよろしくお願いいたします。

お礼日時:2008/02/06 06:44

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