名称   /数量/種類
りんご/1/食べ物 
自動車/2/乗り物
a/3/アルファベット
バナナ/4/食べ物
消防車/6/乗り物
b/5/アルファベット

上記の様な表で種類の列を基準に、「食べ物」のある行だけ集めて別のシートにコピーして、「乗り物」のある行だけ集めて別のシートにするということはできますか?
下記のように考えてみましたが上手くいきませんでした。
質問内容が上手く説明ができないため
分かりづらいかもしれませんが、
もし、お分かりになりましたら教えてください。

------------------------------
Sub test2()

Dim i As Long
For i = 2 To 7
Select Case Cells(i, 3).Value

Case "食べ物"
Rows(i).Select
Selection.Copy
Sheets("食べ物").Select
Rows(i).Select
ActiveSheet.Paste

Case "乗り物"
Rows(i).Select
Selection.Copy
Sheets("乗り物").Select
Rows(i).Select
ActiveSheet.Paste

Case Else
Rows(i).Select
Selection.Copy
Sheets("その他").Select
Rows(i).Select
ActiveSheet.Paste

End Select
Next

End Sub

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

A 回答 (3件)

こんなのではどうでしょうか?


一番の問題は、最初は元データのシートがselectされているけれど、その後別のシートが選ばれるので、2回目からそれが選択されていない事だと思います。
また、「別のシートにコピー」で「Rows(i).Select」とすると、集計がとびとびになってしまうと思います。
Sub test2()
Dim i As Long
For i = 2 To 7
Sheets("Sheet1").Select '元データのあるシートを選ぶ
Select Case Cells(i, 3).Value

Case "食べ物"
Rows(i).Select
Selection.Copy
Sheets("食べ物").Select
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).EntireRow.Select
If Cells(1, 3).Value = "" Then Rows(1).Select '1行目から書く場合
ActiveSheet.Paste

Case "乗り物"
Rows(i).Select
Selection.Copy
Sheets("乗り物").Select
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).EntireRow.Select
If Cells(1, 3).Value = "" Then Rows(1).Select '1行目から書く場合
ActiveSheet.Paste

Case Else
Rows(i).Select
Selection.Copy
Sheets("その他").Select
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).EntireRow.Select
If Cells(1, 3).Value = "" Then Rows(1).Select '1行目から書く場合
ActiveSheet.Paste

End Select
Next
End Sub


ちなみに、シートの選択以外は同じ作業をしているので、こんな風にできると思います。
Sub test3()
Dim i As Long
For i = 2 To 7
Sheets("Sheet1").Select '元データのあるシートを選ぶ
Rows(i).Select
Selection.Copy
Select Case Cells(i, 3).Value
Case "食べ物", "乗り物"
Sheets(Cells(i, 3).Value).Select
Case Else
Sheets("その他").Select
End Select
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).EntireRow.Select
If Cells(1, 3).Value = "" Then Rows(1).Select '1行目から書く場合
ActiveSheet.Paste
Next
End Sub
    • good
    • 0
この回答へのお礼

足りない点をご指摘ありがとうございました。
とても分かりやすく書いてくださって助かります。
また省略したコードも勉強になります。
本当にありがとうございました。

お礼日時:2009/05/25 22:46

Cells(i, 3).Value


とか
Rows(i).Select
は、上位オブジェクトが省略されています。
省略した場合、Activesheetが上位オブジェクトになります。
1回目に
Sheets("食べ物").Selectしているので
Activesheet = Sheets("食べ物")
ということになります。

コピー元シートをSelectすれば問題は解決します。

For i = 2 To 7
Sheets("コピー元のシート名").Select '★追加してください

最初は、どうしてもSelectしますが、多くの場合、Selectしなくても大丈夫です。
そのためには、上位オブジェクトを省略せず明記してやる必要があります。

試しに作ってみました。
With 文で元のシート名を
.Cells(i, 3).Value
とか
.Rows(i).Copy
に修飾しています。
あと、貼り付け先のシート名も変数化しています。

Sub sample1()
  Dim i As Long
  Dim ws As String
  With Sheets("元のシート名")
    For i = 2 To 7
      Select Case .Cells(i, 3).Value
        Case "食べ物"
          ws = "食べ物"
        Case "乗り物"
          ws = "乗り物"
        Case Else
          ws = "その他"
      End Select
      .Rows(i).Copy Sheets(ws).Rows(i)
    Next
  End With
End Sub
    • good
    • 0
この回答へのお礼

足りない点のご指摘ありがとうございます。
とても勉強になります。
本当にありがとうございました。

お礼日時:2009/05/25 22:45

方法はいくつもあると思いますが、提示されたコードを使わせて頂きました。



Sub test2_Next()

Dim i As Long
Dim i1 As Long
Dim i2 As Long
Dim i3 As Long

i1 = 1: i2 = 1: i3 = 1 '振分先各シートの先頭行数

For i = 2 To 7
Select Case Cells(i, 3).Value

Case "食べ物"
Rows(i).Copy Sheets("食べ物").Rows(i1)
i1 = i1 + 1

Case "乗り物"
Rows(i).Copy Sheets("乗り物").Rows(i2)
i2 = i2 + 1

Case Else
Rows(i).Copy Sheets("その他").Rows(i3)
i3 = i3 + 1

End Select
Next

End Sub

ご参考になれば幸いです。
    • good
    • 0
この回答へのお礼

すばやい回答ありがとうございました。
貼り付けるときに一行目から貼り付けるということが
未熟ながら分からなかったので、教えていただいて助かります。
丁寧な言葉も初心者の私はありがたいです。
本当にありがとうございました。

お礼日時:2009/05/25 22:49

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

Qipod用Copy Trans Mangerとは

ipodのデータを取り出したいので探しました。評判はどうでしょうか?

Aベストアンサー

 ファイルは、取り出せません。iPodのディスク上の、ファイルを眺めるだけです。 
   
 削除はできますが、そして追加できますが、ディスクから、ファイルをコピーしたり、移動させたりはできません。 
   
 また、ディスクとしての使用が前提となります。若し、そうでなかったとしたら、itunesで、「 ディスクとして使用する 」の「 チェック 」を入れる必要があります。 

QExcel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

Excel2000です。

Sheet1のA列・B列・C列・・・にデータが入っています。
Sheet2のA列・B列・C列・・・にデータが入っています。

Sheet1のA列とSheet2のA列は、似たようなデータが入っています。
Sheet1のB列とSheet2のB列も、同様です。
C列以降のデータは、シート間で全然関係ありません。

Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、
を知るには、どうすればよいですか。
C列以降の列のデータは、比較する際に使いません。

つまり、
Sheet1のA = Sheet2のA
かつ
Sheet1のB = Sheet2のB
であるような行を知りたいのですが、

どうすればよいのでしょうか。

Aベストアンサー

Sheet1、Sheet2 ともに空いている列に =A1&B1 のような連結データを作り、Matchなどで比較するとか、、、

Sheet1 の E1 =A1&B1
Sheet2 の E1 =A1&B1
Sheet1 の F1 =MATCH(E1,Sheet2!E:E,0)

Qメール転送サービスTRANS-MAILの設定方法

メール転送サービスTRANS-MAILで
自分のプロバイダ宛に届いたメールを
携帯電話のメールに転送したいのですが
設定方法が間違っているのか、転送できないのです。。。

TRANS-MAILで取得したアドレス宛にメールが届くと
ちゃんと携帯までメールが転送されます。

プロバイダ→TRANS-MAIL→携帯メール、の転送は
出来ないのでしょうか?

どなたか設定方法がわかる方、ご指導お願いします(ToT)

Aベストアンサー

こんばんわ。
通常のプロバイダーでしたら、メールの転送サービスは、特に料金不要でやっていると思いますが・・

>プロバイダ→TRANS-MAIL→携帯メール
この手順ではなくて、

プロバイダ→携帯メール
TRANS-MAIL→携帯メール

の2本だてにはなりますが、普通は問題無いと思いますが・・

よろしければ「プロバイダ名」を教えてくれませんか?

Q[Excel VBA] selectionとselectはどのように違うのですか?

selectionオブジェクトは、selectされたオブジェクトを表すときに
使用するのですか?

使用するときの違いがわかりません。
よろしくお願いいたします。

Aベストアンサー

こんばんは。Wendy02です。

返事が遅くなってすみません。ちょっと、面倒なことをしていたので……。

>selectionは、セル範囲の取得だけにしか使用できず、他の
>オブジェクトは使えないですね?

いいえ、マウスで選択するもので、ワークシートの中のものなら、ほとんどです。
一つだけできないのは、コントロールツールのオブジェクトですね。

ためしに、

MsgBox TypeName(Selection)

として、マクロを動かしてみてください。

Range やら、ChartArea とか、いろいろ出てくるはずです。つまり、それが取得したオブジェクトですから、その後は、いろいろ加工することが出来ます。ただし、ChartArea などは、ちょっと面倒だから、そのまま、ActiveChart と切り替えたほうが楽です。

Qzero-trans activityとは?

 私は現在、トレハロース輸送体であるTRET1に関する論文を読んでいます。その論文では、zero-trans activityというものをを測っています。このzero-trans activity測定後は、データをミカエリスーメンテンの式にあてはめ、続いて非線形近似によってVmaxとKmの値を出しています。
 このzero-trans activityとは何をあらわすのかを教えてください。自分が調べた限りでは、糖輸送体の糖摂取量を測る際に用いられているという気がしましたがさだかではありません。ご回答よろしくお願いします。

Aベストアンサー

Pubmedで"zero-trans"を検索し、最も古い文献から見ていくと分かるはずです。

Qエクセル =INDIRECT("Sheet"&ROW(A2)&"A1")

たびたび恐縮です。

別に質問したINDIRECT("Sheet"&ROW(A2)&"A1")について、概要は理解できました。(この式の場合、Sheet2のA1の値を表示させるものだと思います。)

よく理解していない点
*””位置、なぜ?
*&は文字列をつなぐという意味でよいのか?
*&の位置、なぜ?

多分、最初の”と最後の"が1組で中間の2つが別の1組と思います。とすると、なぜ中間部が"&---&"と表現しなければいけないのかがよく解りません。せめて、"&---"&なら理解できるような気がします。

お願いいたします。

Aベストアンサー

>*&は文字列をつなぐという意味でよいのか?

そうです。
文字の連結を行います。

>なぜ中間部が"&---&"と表現しなければいけないのかが

(! が抜けていますが・・・)
"Sheet" と "!A1" は、文字として記入されているので、""で括る必要があります。
ROW(A2) は、関数なので、"ROW(A2)" としてしまったら、ROW(A2) と言う関数は機能しません。
そうなると、INDIRECT("SheetROW(A2)!A1")という形になり、希望の動作になりません。

"Sheet"(文字)& ROW(A2)(関数)& "!A1"(文字)
"Sheet"(文字)& 2(関数の戻り値) & "!A1"(文字)
最終的に "Sheet2!A1" という文字が INDIRECT で処理されます。

QTRANS-の意味合いは

TRANSFER
TRANSLATE
TRANSFORM
この三つの動詞のROOT(SIMPLE WORD)としてのTRANS-
はPREFIXですか
三つの事例で意味の差異は何ですか

Aベストアンサー

1。 trans + ferre 「運ぶ」
http://www.merriam-webster.com/dictionary/transfer
2。 trans + latus ferre の過去分詞
http://www.merriam-webster.com/dictionary/translate?show=0&t=1298361776
3。 trans + formare「形」
http://www.merriam-webster.com/dictionary/transform
 いずれもラテン語から入った言葉で、もとの意味は下記のように「向こうへ」「横に」「~を通って」という意味です。across, beyond, through
http://dictionary.reference.com/browse/trans
 http://www.merriam-webster.com/dictionary/trans-
 向こうに運ぶのが transfer(運搬する)、向こう(の言葉)に移すのが translate(翻訳する)、向こうの形にするのが transform(変形する)です。

反対語は cis-「こちらの」という前接辞で、 cisalpine というと「(普通イタリア側から見て)アルプス山脈のこちら側」 transalpine「アルプス山脈の向こう側」という意味があります。

 でご質問ですが
>>TRANS-はPREFIXですか

 はい、そうです。
>>三つの事例で意味の差異は何ですか

 上に述べたように、意味の差はありません。

1。 trans + ferre 「運ぶ」
http://www.merriam-webster.com/dictionary/transfer
2。 trans + latus ferre の過去分詞
http://www.merriam-webster.com/dictionary/translate?show=0&t=1298361776
3。 trans + formare「形」
http://www.merriam-webster.com/dictionary/transform
 いずれもラテン語から入った言葉で、もとの意味は下記のように「向こうへ」「横に」「~を通って」という意味です。across, beyond, through
http://dictionary.reference.com/browse/trans
 http://www.mer...続きを読む

QExcel2013 VBA sheet1とsheet2のデータを合成してsheet3を作るには

sheet1に氏名、sheet2にその氏名の人の趣味が入っています。

新たにsheet3を作成して、
氏名1
趣味
氏名1

氏名2
趣味
氏名2

氏名3
趣味
氏名3

氏名4
趣味
氏名4

としたいです。
VBAのコードを教えて下さい。

例えば
①sheet1には
A1;1 B1;阿部 C1;あべ
A2;2 B2;佐藤 C2;さとう
A3;3 B3;山名 C3;やまな
A4;4 B4;山本 C4;やまもと

②sheet2にはその人の趣味が入っています。

A1;1  B1;釣り C1;つり
A2;空白 B2;踊り C2;おどり
A3;空白 B3;歌 C3;うた

A4;2  B4;読書 C4;どくしょ
A5;空白 B5;野球 C5;やきゅう


A6;3 B6;映画鑑賞 C6;えいがかんしょう

A7;4  B7;釣り C7;つり
A8;空白 B8;踊り C8;おどり
A9;空白 B9;歌 C9;うた

③sheet3を新に作成して

A1;1 B1;阿部 C1;あべ
A2;空白  B2;釣り C2;つり
A3;空白 B3;踊り C3;おどり
A4;空白 B4;歌 C4;うた
A5;空白 B5;阿部 C5;あべ

A6;2 B6;佐藤 C6;さとう
A7;空白 B7;読書 C7;どくしょ
A8;空白 B8;野球 C8;やきゅう
A9;空白 B9;佐藤 C9;さとう

A10;3 B10;山名 C10;やまな
A11;空白 B11;映画鑑賞 C11;えいがかんしょう
A12;空白 B12;山名 C12;やまな

A13;4 B13;山本 C13;やまもと
A14;空白  B14;釣り C14;つり
A15;空白 B15;踊り C15;おどり
A16;空白 B16;歌 C16;うた
A17;空白 B17;山本 C17;やまもと



のようにしたいです。

実際、データは、sheet1は419列、sheet2は2563列あります。

sheet1に氏名、sheet2にその氏名の人の趣味が入っています。

新たにsheet3を作成して、
氏名1
趣味
氏名1

氏名2
趣味
氏名2

氏名3
趣味
氏名3

氏名4
趣味
氏名4

としたいです。
VBAのコードを教えて下さい。

例えば
①sheet1には
A1;1 B1;阿部 C1;あべ
A2;2 B2;佐藤 C2;さとう
A3;3 B3;山名 C3;やまな
A4;4 B4;山本 C4;やまもと

②sheet2にはその人の趣味が入っています。

A1;1  B1;釣り C1;つり
A2;空白 B2;踊り C2;おどり
A3;空白 B3;歌 ...続きを読む

Aベストアンサー

こんばんは!

Sheet3にSheet1のデータを二度表示させるのがイマイチ理解できませんが、
ご質問通りにやってみました。

Sub Sample1()
Dim i As Long, lastRow As Long, myCnt As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Rows(1).Insert
wS2.Range("D:D").Insert
With Worksheets("Sheet3")
.Cells.ClearContents
lastRow = wS2.Cells(Rows.Count, "B").End(xlUp).Row
Range(wS2.Cells(2, "D"), wS2.Cells(lastRow, "D")).Formula = "=IF(A2="""",D1,A2)"
For i = 1 To wS1.Cells(Rows.Count, "A").End(xlUp).Row
With .Cells(Rows.Count, "B").End(xlUp).Offset(1)
.Value = wS1.Cells(i, "B")
.Offset(, -1) = wS1.Cells(i, "A")
.Offset(, 1) = wS1.Cells(i, "C")
End With
Set c = wS2.Range("A:A").Find(what:=wS1.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
myCnt = WorksheetFunction.CountIf(wS2.Range("D:D"), wS1.Cells(i, "A"))
.Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(myCnt, 2).Value = _
c.Offset(, 1).Resize(myCnt, 2).Value
End If
'▼
.Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(, 2).Value = _
wS1.Cells(i, "B").Resize(, 2).Value
'▲
Next i
.Rows(1).Delete
wS2.Rows(1).Delete
wS2.Range("D:D").Delete
Application.ScreenUpdating = True
.Activate
End With
MsgBox "完了"
End Sub

※ コード内の▼から▲までがもう一度Sheet1のデータを表示させているコードです。
細かい検証はしていませんが、
こんな感じではどうでしょうか?m(_ _)m

こんばんは!

Sheet3にSheet1のデータを二度表示させるのがイマイチ理解できませんが、
ご質問通りにやってみました。

Sub Sample1()
Dim i As Long, lastRow As Long, myCnt As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Rows(1).Insert
wS2.Range("D:D").Insert
With Worksheets("Sheet3")
.Cells.ClearContents
lastRow = ...続きを読む

QVOXY TRANS-Xについて

旧型のVOXY TRANS-Xが欲しいなと思ってますが、(旧型の二列仕様もTRANS-Xというグレード名でしたっけ?)
二列目の広さは三列仕様と同じで、ただ単に三列目部分が荷台として使えるだけでしょうか?
二列目が三列仕様よりもロングスライドで後ろまで行って居住スペースが広く使えれば・・・と期待しています。
どなたか、回答よろしくお願いします。

Aベストアンサー

「TRANS-X」(ノアのグレードだと「YY」)は、

乱暴に言ってしまえば、ただ3列目シートを取っ払っただけですから、車体に手は加えていないので、ロングスライドはしないはずです。(6:4分割可倒のダブルフォールディング式ベンチシートです。)

じゃあ、なんでそんなグレードを設定したの?と言うと「TRANS-X」のハイライトは、2列/5人乗りを踏まえての変幻自在なカーゴルームにあります。

ポイントは、単に空間を提供するだけでは無く、そこを有効活用する為の専用間仕切り板(デッキボード)を用意した事です。

合計3枚のデッキボードは、カーゴルームの側壁に設けられた左右の腰板の間を橋渡ししたり、適宜外したり、組み合わせを変えたりする事によって、合計9パターンの異なる用途に利用出来ます。

代表的なのは「ベッド」「テーブル」「長尺物」の各モードです。

まず「ベッド」は、一見、ユニットバスの分割式フタにも似た樹脂なので、「果たして大人が2人横になって荷重に耐えられるものか?」と危惧されますが、「たわみ」などは皆無で、しっかりした印象です。

「テーブル」は1枚のデッキボードの裏に折り畳み式の脚が付いており、それを立てる事によって「掘りゴタツ」の様になります。

「長尺物」はセカンドシートのみならず、助手席までバックレストを前倒しします。この場合、室内長は実に2935mmにもなるので、サーフボード等もそのまま楽々収容できるはずです。

特徴的なのは、それら全てのモードで水平面のレベルが揃っており、又、オリジナル設計だけに、見た目の収まりがキレイでスッキリしている事です。

更に、最後部にはカーゴルーム本来の床板を跳ね上げると、そこだけで軽自動車のトランク位はある収納スペースが出現します。

「TRANS-X」(ノアのグレードだと「YY」)は、

乱暴に言ってしまえば、ただ3列目シートを取っ払っただけですから、車体に手は加えていないので、ロングスライドはしないはずです。(6:4分割可倒のダブルフォールディング式ベンチシートです。)

じゃあ、なんでそんなグレードを設定したの?と言うと「TRANS-X」のハイライトは、2列/5人乗りを踏まえての変幻自在なカーゴルームにあります。

ポイントは、単に空間を提供するだけでは無く、そこを有効活用する為の専用間仕切り板(デッキボード)を用意した事で...続きを読む

Qsheet1(1月)からsheet12(12月)をsheet13(H17年度)に集計したい

sheet1(1月)
A   B  C
1 得意先  銀行  金額
2 aa社 xx 50
3 cc店 yy 30
4 ee社 xx 20

sheet2(2月)
  A B C
1 bb zz 50
2 ee xx 30
3 cc yy 50
4 dd ww 30

目的のsheet
sheet13(H17年度)
A     B    C    D
1 得意先  1月   2月   3月
2 aa社   50  
3 bb社 50
4 cc社 30 50
5 dd社 30
6 ee社 20 30

Aベストアンサー

元ファイルをシート分けせずに、月フィールドを作って整理し
ピポットテーブルを使えば一発です。

得意先銀行金額月
aaxx501月
ccyy301月
eexx201月
bbzz502月
eexx302月
ccyy502月
ddww302月

としておき、ピポットテーブルで
行:得意先、列:月、データ:合計/金額とすればよいでしょう


人気Q&Aランキング