Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1451 / 13646 ツリー ←次へ | 前へ→

【74361】月ごとの転記 愛子 13/5/26(日) 21:06 質問[未読]
【74362】Re:月ごとの転記 愛子 13/5/26(日) 21:47 発言[未読]
【74363】Re:月ごとの転記 感想 13/5/26(日) 22:41 発言[未読]
【74364】Re:月ごとの転記 愛子 13/5/26(日) 23:42 発言[未読]
【74365】Re:月ごとの転記 感想 13/5/27(月) 7:29 発言[未読]
【74366】Re:月ごとの転記 愛子 13/5/27(月) 9:18 発言[未読]
【74367】Re:月ごとの転記 UO3 13/5/27(月) 10:44 発言[未読]
【74368】Re:月ごとの転記 愛子 13/5/27(月) 12:26 発言[未読]
【74369】Re:月ごとの転記 愛子 13/5/27(月) 13:02 発言[未読]
【74373】Re:月ごとの転記 感想 13/5/27(月) 20:00 発言[未読]
【74377】Re:月ごとの転記 愛子 13/5/27(月) 20:59 発言[未読]
【74378】Re:月ごとの転記 感想 13/5/27(月) 21:12 発言[未読]
【74379】Re:月ごとの転記 愛子 13/5/27(月) 22:18 発言[未読]
【74380】Re:月ごとの転記 13/5/28(火) 6:50 発言[未読]
【74381】Re:月ごとの転記 愛子 13/5/28(火) 9:18 発言[未読]
【74383】Re:月ごとの転記 UO3 13/5/28(火) 12:35 発言[未読]
【74384】Re:月ごとの転記 愛子 13/5/28(火) 14:36 質問[未読]
【74385】Re:月ごとの転記 UO3 13/5/28(火) 15:13 発言[未読]
【74389】Re:月ごとの転記 愛子 13/5/28(火) 23:33 発言[未読]
【74391】Re:月ごとの転記 13/5/29(水) 6:59 発言[未読]
【74412】Re:月ごとの転記 愛子 13/5/30(木) 20:10 お礼[未読]
【74386】Re:月ごとの転記 愛子 13/5/28(火) 15:34 発言[未読]
【74388】Re:月ごとの転記 UO3 13/5/28(火) 19:48 発言[未読]
【74390】Re:月ごとの転記 愛子 13/5/28(火) 23:37 発言[未読]
【74392】Re:月ごとの転記 13/5/29(水) 7:35 回答[未読]
【74400】Re:月ごとの転記 愛子 13/5/29(水) 15:44 お礼[未読]
【74396】Re:月ごとの転記 UO3 13/5/29(水) 15:02 発言[未読]
【74401】Re:月ごとの転記 愛子 13/5/29(水) 16:37 発言[未読]
【74402】Re:月ごとの転記 UO3 13/5/29(水) 17:39 発言[未読]
【74403】Re:月ごとの転記 愛子 13/5/29(水) 20:40 質問[未読]
【74408】Re:月ごとの転記 UO3 13/5/30(木) 9:29 発言[未読]
【74409】Re:月ごとの転記 愛子 13/5/30(木) 10:55 発言[未読]
【74410】Re:月ごとの転記 愛子 13/5/30(木) 14:12 発言[未読]
【74411】Re:月ごとの転記 愛子 13/5/30(木) 18:55 お礼[未読]
【74404】Re:月ごとの転記 感想 13/5/29(水) 21:20 発言[未読]
【74407】Re:月ごとの転記 愛子 13/5/30(木) 0:33 発言[未読]

【74361】月ごとの転記
質問  愛子 E-MAIL  - 13/5/26(日) 21:06 -

引用なし
パスワード
   UO様
今晩は、前回の文字の比較ではお世話になりました。
今回は、前回の処理を活かして色々試行錯誤の中、
表を改善しました中でご質問があります。
前回迄の処理:シート名:集計 E列;入力データの名前 L列;入力データの
金額 N列;名前のマスター(全件分) O列;E列の名前とN列の名前が合致
すればL列の金額を反映します、でした。

当該質問の前に、シート名:集計 はデータだけの場所にしようと、合致した
金額の場所は、名前のマスターと共に別のシートの方がいいと思いまして
シート名:一致 のA列に名前のマスター(全件分)、B列に金額をもってくる
ようにしています。(下記コードを参照してください)

ここで色々欲望が出まして、B列に単に金額を入れるのではなく、月々の列を
作ります。

ここから質問1.です:1.インプットボックスで、作業する月を入れて下さい ok キャンセル
月を入力するとその月に金額が表示されるVBAを作って頂きたいのです。

例えば5 と入力すれば、5月の列に金額が表示されます。といった具合です。
列表示は、B列に合計(4月から3月迄の合計 決算は3月です)C列に4月 〜N列に3月に金額を入れたいのです。データは2行目からです。

質問2.です:該当月の金額が表示されてEnd Withが終わればMsgBox”集計が終わりました””と表示をだして頂きシート名:入力伝票の画面に戻ってほしいのです。
色々しても戻らないので、リクエストしました。お手数かけてすみませんが宜しくお願いします。

【74362】Re:月ごとの転記
発言  愛子 E-MAIL  - 13/5/26(日) 21:47 -

引用なし
パスワード
   UO様へ
先程、コードを下記参照としましたが忘れていましたので、ここに記載します。
よろしくお願いします。

Sub 集計から一致のシートに金額転記()
'Dictionary処理案。
Dim c As Range
Dim newV As Variant
Dim i As Long
Dim dic As Object

Set dic = CreateObject("Scripting.Dictionary")

With Sheets("集計")
'bシートの名前と金額をDictionaryに格納(2行目以降)
For Each c In .Range("E2", .Range("E" & .Rows.Count).End(xlUp))
dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Value
Next
'bシートの N列、O列の内容(2行目以降)を配列に格納
End With
With Sheets("一致")
newV = .Range("a2", .Range("a" & .Rows.Count).End(xlUp)).Resize(, 2).Value
For i = 1 To UBound(newV, 1)
If dic.exists(newV(i, 1)) Then newV(i, 2) = dic(newV(i, 1))
Next
.Range("a2").Resize(UBound(newV, 1), UBound(newV, 2)).Value = newV
.Select
End With

End Sub
以上です

【74363】Re:月ごとの転記
発言  感想  - 13/5/26(日) 22:41 -

引用なし
パスワード
   名指しでの質問は歓迎されません。

> 質問2.です:
> 該当月の金額が表示されてEnd Withが終われば
> MsgBox”集計が終わりました””と表示をだして頂き、
> シート名:入力伝票の画面に戻ってほしいのです。

これってどういう質問なんでしょう。
何が不明なんですか?

小出しにはしていますが、結局は丸投げですよね。
出されたコードは、ほぼ回答者のコードと同じですね。
やっぱりルール違反はやめましょうよ。

# 女性名を使ってますが、名前を連呼するのは変ですね。

【74364】Re:月ごとの転記
発言  愛子  - 13/5/26(日) 23:42 -

引用なし
パスワード
   ▼感想 さん:
名指しでの質問は歓迎されません。---
申し訳ございませんでした。最初の質問でしたら名指をしませんが、
名指しをさせて頂いた方には色々細かな点で私の説明不測をきちんと
理解して頂きコードを作成されたましたので、関連した追加質問は、
その方だったらわかって頂き易いと思ったからです。以後気をつけます。

> 質問2.です:
>> 該当月の金額が表示されてEnd Withが終われば
>> MsgBox”集計が終わりました””と表示をだして頂き、
>> シート名:入力伝票の画面に戻ってほしいのです。
>
>これってどういう質問なんでしょう。---例えば、月を入れて下さい と
メッセージが出れば該当月を入れます。そうすれば該当月の列に金額が入ります。
MsgBox”集計が終わりました”は私が調べてコードを入れます。
集計が終わりましたとのメッセージの後に、別のシート名:入力伝票 のシートに
戻って欲しいのです。 Sheets("集計").Select  Range("O155").Selectとコードを入れてもエラーになるのです、それが何故かわからないのです(色々試したのですが)

小出しにはしていますが、結局は丸投げですよね。----そのように取られても仕方がありませんが、私も質問しましたコード以外で、自分で調べて作成したものも
沢山あります。

出されたコードは、ほぼ回答者のコードと同じですね。---わからない箇所だから
教えて頂いたコードを使っています。変更した箇所を説明しただけでは、わかり
ずらいかと思ってコードを貼り付けました。

>やっぱりルール違反はやめましょうよ。---質問は、私が処理する事の一部ですからルール違反だと思っていなかったのです。
>
># 女性名を使ってますが、名前を連呼するのは変ですね。--名前を連呼するのは
変とはどういう意味でしょうか?

【74365】Re:月ごとの転記
発言  感想  - 13/5/27(月) 7:29 -

引用なし
パスワード
   (質問1に関して)

> インプットボックスで、作業する月を入れて下さい ok キャンセル
> 月を入力するとその月に金額が表示されるVBAを作って頂きたいのです。

作って下さいではなく、詰まっている点を具体的に質問したほうがいいでしょう。

4月以降と未満で場合分けすることになりますが、
月に応じて、何列目に書き込むかは組み立てることができますよね。

金額を入れる箇所は、次のような考え方をもとにして、できると思います。

  Dim mat1  '氏名を入れる配列
  Dim mat2  '金額を入れる配列
  With Sheets("xxxx")
    mat1 = .Range("a2", .Range("a" & .Rows.Count).End(xlUp)).Value
    ReDim mat2(1 To UBound(mat1, 1), 1 To 1)
    
    '''' mat2の値は、今と同じ手法で、Dictionaryとmat1の値を使って算出
    
    Cells(2, その月に相当する列番号).Resize(UBound(mat2, 1), 1) = mat2
  End With

(質問2に関して)

> MsgBox”集計が終わりました”は私が調べてコードを入れます。
> 集計が終わりましたとのメッセージの後に、別のシート名:入力伝票 のシートに
> 戻って欲しいのです。 Sheets("集計").Select  Range("O155").Selectとコードを
> 入れてもエラーになるのです、それが何故かわからないのです(色々試したのですが)

最初からあなたが調べて、コードを示してください。
また、エラーは、どの行で、どんなエラーが出るのかを示して、質問して下さい。

[考え方のヒント]
 そのコードが標準モジュールに書かれているか、シートモジュールに
 書かれているかによって状況が変わります。多分後者でないですか?
 Range("O155").Select はシートモジュールの書かれたシートのO55を選択に
 行きます。
 しかし、アクティブなのは別のシートなのでエラーになるのでしょう。
 標準モジュールに書くか、セル範囲には、逐一、シート名を修飾して扱うことを
 お勧めします。


なお、他人の発言は、行頭に > をつけて引用することで十分で、
ご自分の発言に逐一ハンドルネームを書く必要はありません。
このスタイル(他人の発言との区別は "> " の有無だけ)で統一してもらえば、
もっと読みやすくなります。

# 子供じゃないので、自分のことをファーストネーム(に相当する名詞)で呼ぶのは
# 違和感がありました。
# そのことに気づかないのは、何か、別の事情でもあるんでしょうか?

【74366】Re:月ごとの転記
発言  愛子  - 13/5/27(月) 9:18 -

引用なし
パスワード
   ▼感想 さん:
おはようございます。
午後から出社します。会社で表を作っていますので、下記で教えて頂いたことを
確認します。

>(質問1に関して)
>作って下さいではなく、詰まっている点を具体的に質問したほうがいいでしょう。
そうですね、私の言い方が間違っていました。すみませんでした。
>
>4月以降と未満で場合分けすることになりますが、
>月に応じて、何列目に書き込むかは組み立てることができますよね。
申し訳ないのですが、どう作っていいかわかりません、


>金額を入れる箇所は、次のような考え方をもとにして、できると思います。
>
>  Dim mat1  '氏名を入れる配列
>  Dim mat2  '金額を入れる配列
>  With Sheets("xxxx")
>    mat1 = .Range("a2", .Range("a" & .Rows.Count).End(xlUp)).Value
>    ReDim mat2(1 To UBound(mat1, 1), 1 To 1)
>    
>    '''' mat2の値は、今と同じ手法で、Dictionaryとmat1の値を使って算出
>    
>    Cells(2, その月に相当する列番号).Resize(UBound(mat2, 1), 1) = mat2
>  End With
>
>(質問2に関して)

>[考え方のヒント]
> そのコードが標準モジュールに書かれているか、シートモジュールに
> 書かれているかによって状況が変わります。
コードの書かれている場所違いでエラーが出たのかも知れませんね、
出社して確認をします。

>このスタイル(他人の発言との区別は "> " の有無だけ)で統一してもらえば、
>もっと読みやすくなります。
私は、>の有無の区別を知らなかったので、回答者が過去に言った事と
私が言っている事とを分離した方が回答者にわかりやすいだろうと思って投稿者の愛子が発言していますよとの意味で愛子と書きました。

【74367】Re:月ごとの転記
発言  UO3  - 13/5/27(月) 10:44 -

引用なし
パスワード
   ▼愛子 さん:

少し要件を思い出すリハビリ時間をくださいね。
(年寄りは物忘れが激しいので)

ところで、私からも「感想」を。
やはり、名指しの質問は、QAサイトへの投稿としては具合がよくないでしょうね。
マナー以前に、他の優れた回答者さんから、もっと素晴らしい回答をもらえる可能性が
ぐ〜んと減っちゃいますから。
愛子さんなら、要件・仕様といったものを、回答者サイドに正確に理解してもらおうという努力をされますから
他の方々でも、最終的には、ちゃんと理解したうえで回答されると思います。

今後の参考にしていただければ幸甚です。

【74368】Re:月ごとの転記
発言  愛子 E-MAIL  - 13/5/27(月) 12:26 -

引用なし
パスワード
   ▼UO3 さん:
こんにちは、
>ところで、私からも「感想」を。
>やはり、名指しの質問は、QAサイトへの投稿としては具合がよくないでしょうね。
今後気をつけます。
>マナー以前に、他の優れた回答者さんから、もっと素晴らしい回答をもらえる可能性が
>ぐ〜んと減っちゃいますから。
温かい配慮、有難うございます。

>今後の参考にしていただければ幸甚です。
はい、必ず守っていきます。

【74369】Re:月ごとの転記
発言  愛子 E-MAIL  - 13/5/27(月) 13:02 -

引用なし
パスワード
   先程出社して下記のテストを試みましたが、
前回の質問で、シート名:入力伝票に戻らない について標準モードに変更することによって出来ました。有難うございます。

>4月以降と未満で場合分けすることになりますが、
>月に応じて、何列目に書き込むかは組み立てることができますよね。
上記2つはどうして作るのか解りません。

申し訳ないのですが、下記コードをどこに入れて組み合わせるのか解りません。
ご教授をお願いします。
>金額を入れる箇所は、次のような考え方をもとにして、できると思います。
>
>  Dim mat1  '氏名を入れる配列
>  Dim mat2  '金額を入れる配列
>  With Sheets("xxxx")
>    mat1 = .Range("a2", .Range("a" & .Rows.Count).End(xlUp)).Value
>    ReDim mat2(1 To UBound(mat1, 1), 1 To 1)
>    
>    '''' mat2の値は、今と同じ手法で、Dictionaryとmat1の値を使って算出
>    
>    Cells(2, その月に相当する列番号).Resize(UBound(mat2, 1), 1) = mat2
>  End With
>

【74373】Re:月ごとの転記
発言  感想  - 13/5/27(月) 20:00 -

引用なし
パスワード
   > >4月以降と未満で場合分けすることになりますが、
> >月に応じて、何列目に書き込むかは組み立てることができますよね。
> 上記2つはどうして作るのか解りません。

インプットボックスで入力した「月」と、
それに対応する金額を書き込む列の関係は、
月  列
4  3
5  4
6  5
・ ・
12 11
1 12
2 13
3 14

これを計算式で得ようとしたら
 ・月 が4以上 なら (月 - 1)
 ・月 が4未満 なら (月 +12 - 1)
となりませんか?
それほど難しい話ではないはずです。

----------

> 申し訳ないのですが、下記コードをどこに入れて組み合わせるのか解りません。

組み合わせるには、まず元のコードをしっかり理解する必要があります。
Dictionaryとかは理解されているのでしょうか?

人が仮に3人いたとすると、
前回仮に作ったnewVは3行2列の行列でした。
a 100
b 200
c 300
これをN列、O列に書き込みました。

今回は、3行1列の金額だけからなる配列を作ってはどうかということです。
同じように、
For i = 1 ti UBound(mat1,1)
  If dic.Exists(mat1(i,1)) Then mat2(i,1) = dic(mat1(i,1))
Next
とすることで、金額からなる配列 mat2を作れます。

そして、これを上で求めた書込先に書き込めばいいわけです。
それが、
  Cells(2,上で求めた列).Resize(UBound(mat2,1) , 1).Value = mat2
です。
コードをコピペするのではなく、意味を理解しながら、作って見て下さい。

【74377】Re:月ごとの転記
発言  愛子 E-MAIL  - 13/5/27(月) 20:59 -

引用なし
パスワード
   ▼感想 さん:
>インプットボックスで入力した「月」と、
>それに対応する金額を書き込む列の関係は、
>月  列
> 4  3
> 5  4
> 6  5
> ・ ・
>12 11
> 1 12
> 2 13
> 3 14
>これを計算式で得ようとしたら
> ・月 が4以上 なら (月 - 1)
> ・月 が4未満 なら (月 +12 - 1)
>となりませんか?
>それほど難しい話ではないはずです。
意味合いは解ります。 しかしそれをどんなコード使って書くかが解りません。
はっきり言って構文が出来ないのです。「コードをコピペするのではなく、意味を理解しながら、作って見て下さい」の意味もその通りだと思うのですが下記の内容も私にとって難しいです。
たとえ調べて少し解ったとしても、まっとうする為には、下記コード以外に
色々使うと思うのです。やはり該当月を入力して同じ名前に一致する
合計額を入れるコードを教えて頂きたいです。

【74378】Re:月ごとの転記
発言  感想  - 13/5/27(月) 21:12 -

引用なし
パスワード
   最初から投げていては進みません。
勉強する気持ちはあるのでしょうか?
そういうことは考えておらず、
とりあえず結果だけ欲しいというお考えなら、
私はこれで失礼しようと思います。

【74379】Re:月ごとの転記
発言  愛子  - 13/5/27(月) 22:18 -

引用なし
パスワード
   ▼感想 さん:
投げているのではありません、仕事で早く使いたいだけです。
>勉強する気持ちはあるのでしょうか?
勿論あります。しかしそれには、時間が長くかかります。
今の段階で、そこまで待てないのです。
少し考えさせて下さい。

【74380】Re:月ごとの転記
発言    - 13/5/28(火) 6:50 -

引用なし
パスワード
   こんにちは。

こんなのはどうでしょう。

「仕事で早く必要だから」本スレではまずコードをいただく。
でも「理解できてないコードは応用が利かないから」
動作確認が済んだら、いただいたコードを理解できるまで、
本スレで説明を求める。(目の前に「指導者」がいるわけですから)
本スレのコードを理解できない限り、次のコードを貰わない。


▼愛子 さん:
>▼感想 さん:
>投げているのではありません、仕事で早く使いたいだけです。
>>勉強する気持ちはあるのでしょうか?
>勿論あります。しかしそれには、時間が長くかかります。
>今の段階で、そこまで待てないのです。
>少し考えさせて下さい。

【74381】Re:月ごとの転記
発言  愛子  - 13/5/28(火) 9:18 -

引用なし
パスワード
   ▼佳 さん:
おはようございます。
朝早くからのご返答有難うございます。
>「仕事で早く必要だから」本スレではまずコードをいただく。
>でも「理解できてないコードは応用が利かないから」
私も教えて頂いたコードを次回に応用したい気持ちは充分にあります。

>動作確認が済んだら、いただいたコードを理解できるまで本スレで説明を求める。(目の前に「指導者」がいるわけですから)

有り難いお言葉、嬉しいです。
今迄、自分がしたいコードを質疑応答の中でやっと終えたのに、
それ以上わからないコードで細かい事を聞くのが申し訳ないと思っていました。
でも「本レスで説明を求める--」を見て考えが変りました。
そちらからすれば、そんなことわからないのと思われることをコードが違う
たびに、何回も聞く事があるかも知れません。でも自分でもヘルプとかで調べて
どうしてもわからないところを質問して行きます。その節は、宜しくお願いします。

>本スレのコードを理解できない限り、次のコードを貰わない。
 いいアイデアを有難うございます。約束します。

【74383】Re:月ごとの転記
発言  UO3  - 13/5/28(火) 12:35 -

引用なし
パスワード
   ▼愛子 さん:

皆さんからのアドバイスは、ぜひ、今後に生かしていってくださいね。
以下、今回のテーマの対応案です。
B列(合計列)には数式が入っているのでしょうか?
コードでは、B列に対しては何もしていません。

Sub 集計から一致のシートに金額転記2()
  Dim c As Range
  Dim i As Long
  Dim dic As Object
  Dim mm As Long
  Dim nameV As Variant
  Dim mmV As Variant
  Do
    mm = Application.InputBox("作業する月をいれてください", Type:=1)
    If mm = 0 Then Exit Sub 'キャンセルボタン
    Select Case mm
      Case 1 To 12
        Exit Do
    End Select
    MsgBox "1〜12の範囲で入力してくださいね"
  Loop
  
  If mm < 4 Then mm = mm + 12
  
  Set dic = CreateObject("Scripting.Dictionary")

  With Sheets("集計")
    '集計シートの名前と金額をDictionaryに格納(2行目以降)
    For Each c In .Range("E2", .Range("E" & .Rows.Count).End(xlUp))
      dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Value
    Next
  End With
  
  With Sheets("一致")
    '一致シートの A列と当該月列の内容(2行目以降)を配列に格納
    With .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
      nameV = .Value
      mmV = .Offset(, mm - 2).Value
      For i = 1 To UBound(nameV, 1)
        If dic.exists(nameV(i, 1)) Then mmV(i, 1) = dic(nameV(i, 1))
      Next
      .Offset(, mm - 2).Value = mmV
    End With
    .Select
  End With

  MsgBox "集計が終わりました"
  Sheets("入力伝票").Select
  
End Sub

【74384】Re:月ごとの転記
質問  愛子  - 13/5/28(火) 14:36 -

引用なし
パスワード
   ▼UO3 さん:
こんにちは、
完成しました。有難うございます。

>皆さんからのアドバイスは、ぜひ、今後に生かしていってくださいね。

はい。皆様の言う事は、叱咤激励と思っています。誰がこんなに私の事を
思って言ってくれるでしょうか?有り難いです、意識していきます。

>B列(合計列)には数式が入っているのでしょうか?

B列に4月から3月までをSUM関数で入れています。

   質問1.:下記E2のデータは2行目なのでL1もデータは2行目だと
       思いますのでL1をL2に変えてみるとシート名:一致に転記後、
       集計の金額と比較すれば、1行目の金額は、転記されませんで
       した。そこでL1に戻し、E2をE1に変えたのですが、
       変化は見られませんでした。改めて下記コードの意味を教えて頂け
       ますか?
      
      For Each c In .Range("E2", .Range("E" & .Rows.Count).End         (xlUp))
       dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Valu    

                
    質問2.:下記コードの変数が理解しようと思っているのですが、
       もう一つわからりません。教えて下さい。                  
  
    nameV = .Value                        
      mmV = .Offset(, mm - 2).Value                        
      For i = 1 To UBound(nameV, 1)                        
        If dic.exists(nameV(i, 1)) Then mmV(i, 1) = dic(nameV(i,         1))
       Next                        
      .Offset(, mm - 2).Value = mmV

【74385】Re:月ごとの転記
発言  UO3  - 13/5/28(火) 15:13 -

引用なし
パスワード
   ▼愛子 さん:

こんにちは

理解が正しかったようでほっとしています。
以下、質問1.質問2. へのコメントです。
わかりにくかったら遠慮せずに聞いてくださいね。

質問1.

c.EntireRow.Range("L1").Value

ここは "L1" 、いつも 1 にしてください。
この部分は E2 から下に、E列のセルをピックアップしています。
E2,E3,E4,・・・・・ と参照していきますね。
たとえば、 c が E10 だったとします。このとき参照すべき L列は、当然ながら L10 ですね。
この L10 を参照する方法はいろいろあります。
よく使われるのが、 c.Offset(,7).Value
これは c(E10) からみて、同じ行で、列が右に 7 つ移動したところという記述です。
これでもいいのですが、いくつ離れているかということを【指を折って】数えなきゃいけませんね。
数え間違いをするかもしれません。また、将来、仕様(レイアウト)変更で、E列ではなく、F列を抽出するようになった場合
忘れずに、c.Offset(,6).Value に変更する必要があります。で、うっかり変更を忘れがちです。

で、c.EntireRow.Range("L1").Value

たとえば、A1 というと、我々は、エクセルシートの一番左上隅のセルをイメージしますね。
間違いじゃないんですが、正確に言いますと、【シートのすべてのセル領域の中の A1】ということで
【シートのすべてのセルの中の】が省略されているんです。
ほんとは A というのは、指定セル領域の一番最初の列 という意味です。
1 は、指定セル領域の一番最初の列ということです。

c.EntireRow というのは c (E10 とか E20 とか)が属している行全体というセル領域です。
で、その領域に対して、L1 ということは、1行目 という意味(実際にはシート上の10行目とか20行目とか)
また、 L は 12列目 ということになります。

ややこしいのですが、コードとしては、 L列の、その行の値なんだと、まぁ、c.Offset(,7).Value よりは
見た目、わかりやすいかな ということで、私は、この記述方法が好きです。

                
質問2.:    

まず、 With 〇〇〇 とくくりますと、以降、End With まで、この 〇〇〇 に属するオブジェクトを参照するときに
ほんらいは 〇〇〇.なんとか と指定すべきところ、.なんとか と、頭に .(ピリオド)をつけるだけで OKになります。
記述がスッキリするのみならず、効率面でも若干よろしいようです。          
  
With Sheets("一致")

これで、以降の .なんとか は Sheets("一致").なんとか ということになります。

With .Range("A2", .Range("A" & .Rows.Count).End(xlUp))

上で、With Sheets("一致") でくくっていますので、このコードは

With Sheets("一致").Range("A2", Sheets("一致").Range("A" & Sheets("一致").Rows.Count).End(xlUp))

と同じということになります。で、今度は、このA2〜A列データ最終行 までの領域が With でくくられますので
以降の .なんとか は A2〜A列データ最終行までの領域のなんとか ということになります。

nameV = .Value

.Value は、 A2〜A列データ最終行までの領域の値ということになります。
Variant型変数に、複数セル領域.Value をいれますと、その領域と同じ形の2次元配列になります。

mmV = .Offset(, mm - 2).Value

おなじことなんですが、セル領域がすこし難しいかもしれませんね。
.Offset(, mm - 2) これは、この A2〜A列データ最終行までの領域 を、左側に mm - 2 列だけ移動した領域です。
mm は月です。 5月なら mm - 2 は 3 ですね。5月の列は 3 ですので、このような計算をしています。
結果的に、mmVというVariant型変数が、 5 月の列の値を持つ配列になります。

ここまでで、名前が入った配列(nameV) と 当該月の値が入った配列(mmV) ができあがります。

For i = 1 To UBound(nameV, 1)
配列の 1 行目(シート上のデータでいえば 2行目)から 配列の最後の行 UBound(配列,1) までループさせます。

If dic.exists(nameV(i, 1)) Then mmV(i, 1) = dic(nameV(i, 1))

もし、nameVの要素(A2から始まる名前)が辞書に登録されていれば、その辞書に登録されたデータ(金額合計)を
mmV という当該月用配列の該当の場所にセットします。

.Offset(, mm - 2).Value = mmV

.Offset(, mm - 2) は、上で説明しましたね。該当月のデータ領域です。
そこに、同じ大きさを持った配列 mmV を格納すると、配列の中の値でデータ領域が上書きされます。

【74386】Re:月ごとの転記
発言  愛子  - 13/5/28(火) 15:34 -

引用なし
パスワード
   >▼UO3 さん:
>B列(合計列)には数式が入っているのでしょうか?
先ほど申し上げましたように、式は、B列には横の4月から3月迄のSUM関数とB列の縦100行のところにB列の縦を計算するSUM関数を入れてていますが、
今、テストで動かしますと各月の合計欄は数値に変っています。
格納した事によって数値に変ったのでしょうか?

集計と一致のデータがあっているかを確認の為にB列100行のところで縦の
SUM関数を使いましたが、100行以上なって最終行がわからなくなった時の
コードは、Range("B2", .Range("B" & .Rows.Count).End(xlUp))が終わって、
最後の行から2行までをSUM関数で計算しなさいという命令コードになるのでしょうか?
今、書きながら知恵が出ました。
合計は行が100行以上になれば見るのもスクロールしなければいけませんから
シート名:一致のB列2行目を合計欄として、3行目から下の行20000行迄をSUM関数にすれば見易いですね。
そしてWith .Range("A2", .Range("A" & .Rows.Count).End(xlUp))のA2をA3
にすればいいのですね、

しかし4月から3月の縦計算はどうすればいいのでしょうか?合計欄のSUM関数が数値となって次の一致への転記にはSUM計算されなくなります。

【74388】Re:月ごとの転記
発言  UO3  - 13/5/28(火) 19:48 -

引用なし
パスワード
   ▼愛子 さん:

こんばんは

>今、テストで動かしますと各月の合計欄は数値に変っています。
>格納した事によって数値に変ったのでしょうか?

式はB列だけだと思っていたんですが、各月の(つまり、C列以降)の100行目に
当該付きの合計式があったんですね?
そこを上書きしないようyにコード変更するのはたやすいのですが、万が一、将来データが
100行以上になると困りますね。
マクロで、その時のデータ数にあわせてリストの最後に、合計式を自動セットしましょうか?
(今は、やっていません)

>今、書きながら知恵が出ました。
>合計は行が100行以上になれば見るのもスクロールしなければいけませんから
>シート名:一致のB列2行目を合計欄として、3行目から下の行20000行迄をSUM関数にすれば見易いですね。

あぁ、それはグッドアイデアですね。

●コードで式を自動埋め込みするように変更したコード、明日になりますがアップしますね。

【74389】Re:月ごとの転記
発言  愛子  - 13/5/28(火) 23:33 -

引用なし
パスワード
   ▼UO3 さん:
今晩は、お返事遅くなり申し訳ございません。
コードの説明2・3回繰り返し読んでみますと、80%程わかりました。
後はコードを英単語みたいに覚えて自分で利用し理解していきます。
本当にわかりやすい説明を頂き有難うございます。

【74390】Re:月ごとの転記
発言  愛子  - 13/5/28(火) 23:37 -

引用なし
パスワード
   ▼UO3 さん:
>●コードで式を自動埋め込みするように変更したコード、明日になりますがアップしますね。
はい、有難うございます。

前から思っていた事ですが、
コードを入力している皆様は、沢山のコードを一文字、一文字手入力しているのでしょうか?

【74391】Re:月ごとの転記
発言    - 13/5/29(水) 6:59 -

引用なし
パスワード
   こんにちは。

わかった、とおっしゃってますが、ほんとうにわかったのかな?
いえ、愛子さんを疑っているのではありません。
自分の経験に照らしても、分かったと思ったけれど じつはやっぱり
分かってなかったってことは珍しくないので。

2〜3日たったらもう一度、どんなふうに分かったか思い返してみて
下さい。なにも見ずにあたまの中でおさらいしてみて下さい。
それですこしでも分かってない部分が見つかったら、
再度本スレを読み返してみて。それでも引っかかるようなら、
そこは愛子さんが理解するにあたって、本当に大切な部分と思われるので、

遠慮は要りません、どう分からないのか書ける範囲で書いて、説明を
求めて下さいね。


▼愛子 さん:
>▼UO3 さん:
>今晩は、お返事遅くなり申し訳ございません。
>コードの説明2・3回繰り返し読んでみますと、80%程わかりました。
>後はコードを英単語みたいに覚えて自分で利用し理解していきます。
>本当にわかりやすい説明を頂き有難うございます。

【74392】Re:月ごとの転記
回答    - 13/5/29(水) 7:35 -

引用なし
パスワード
   こんにちは。

> コードを入力している皆様は、沢山のコードを一文字、一文字手入力しているのでしょうか?

初心者の頃によくやっていたのは、マクロの記録にコードを作らせて
そこから必要な単語をコピペです。あと、ヘルプからコピペ。

それでも、書籍のお手本コードを入力するときはひと文字ずつでした。
最初のうちは大変でしたが、楽になったきっかけは、「全部小文字で
打って構わない」と気づいたことと「変数名は自分で好きに変えて構
わない」と気づいたこと。(当時は半角英数20文字の変数とかザラで
した。そんなの打ってられませんって(笑))

VBAのエディターには若干の入力補助機能がありますので、見つけたら
使っていかれるといいと思います。


▼愛子 さん:
>▼UO3 さん:
>>●コードで式を自動埋め込みするように変更したコード、明日になりますがアップしますね。
>はい、有難うございます。
>
>前から思っていた事ですが、
>コードを入力している皆様は、沢山のコードを一文字、一文字手入力しているのでしょうか?

【74396】Re:月ごとの転記
発言  UO3  - 13/5/29(水) 15:02 -

引用なし
パスワード
   ▼愛子 さん:

こんにちは

>前から思っていた事ですが、
>コードを入力している皆様は、沢山のコードを一文字、一文字手入力しているのでしょうか?

私の場合は、98%ぐらいは手打ちですね。
もちろん、年とともに物忘れが激しくなってきていますので、引数がたくさんあるメソッドなんかは
あれ?どうだったかな? こんな時は、その部分だけのマクロ記録をとってコードを生成して
それをコピペ。
あるいは、これは使えそうだなと思うコード部品を、自分用のライブラリーとしてファイルしているんですが
そこから、1〜2行、コピペ。

こんなことはありますね。


さて、コードです。
一致シートの2行目が縦合計行。B3以降のB列には、それぞれの行の横合計の式がはいっているものとします。

Sub 集計から一致のシートに金額転記3()
  Dim c As Range
  Dim i As Long
  Dim dic As Object
  Dim mm As Long
  Dim nameV As Variant
  Dim mmV As Variant
  Dim z As Long
  
  Do
    mm = Application.InputBox("作業する月をいれてください", Type:=1)
    If mm = 0 Then Exit Sub 'キャンセルボタン
    Select Case mm
      Case 1 To 12
        Exit Do
    End Select
    MsgBox "1〜12の範囲で入力してくださいね"
  Loop
  
  If mm < 4 Then mm = mm + 12
  
  Set dic = CreateObject("Scripting.Dictionary")

  With Sheets("集計")
    '集計シートの名前と金額をDictionaryに格納(2行目以降)
    For Each c In .Range("E2", .Range("E" & .Rows.Count).End(xlUp))
      dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Value
    Next
  End With
  
  With Sheets("一致")
    '一致シートの A列と当該月列の内容(2行目以降)を配列に格納
    With .Range("A3", .Range("A" & .Rows.Count).End(xlUp))
      nameV = .Value
      mmV = .Offset(, mm - 2).Value
      For i = 1 To UBound(nameV, 1)
        If dic.exists(nameV(i, 1)) Then mmV(i, 1) = dic(nameV(i, 1))
      Next
      .Offset(, mm - 2).Value = mmV
      z = .Rows.Count
    End With
    
    .Range("B2:N2").FormulaR1C1 = "=SUM(r[1]c:r[" & z & "]c)"
    .Select
    
  End With

  MsgBox "集計が終わりました"
  Sheets("入力伝票").Select
  
End Sub

【74400】Re:月ごとの転記
お礼  愛子  - 13/5/29(水) 15:44 -

引用なし
パスワード
   ▼佳 さん:
私は、ブラインドタッチが苦手で何本かのゆびを使って日頃ワード、エクセルを
入力しています。ですから間違って入力する場合が多いので、修正する事が多く、コードは一文字違っても走りませんから皆さまは、早くコードを打っておられ
ますので感心致しております。以下の事は、まねて行きます、いいアドバイスを
有難うございました。


>初心者の頃によくやっていたのは、マクロの記録にコードを作らせて
>そこから必要な単語をコピペです。あと、ヘルプからコピペ。
>
>それでも、書籍のお手本コードを入力するときはひと文字ずつでした。
>最初のうちは大変でしたが、楽になったきっかけは、「全部小文字で
>打って構わない」と気づいたことと「変数名は自分で好きに変えて構
>わない」と気づいたこと。(当時は半角英数20文字の変数とかザラで
>した。そんなの打ってられませんって(笑))
>
>VBAのエディターには若干の入力補助機能がありますので、見つけたら
>使っていかれるといいと思います。

>

【74401】Re:月ごとの転記
発言  愛子  - 13/5/29(水) 16:37 -

引用なし
パスワード
   ▼UO3 さん:
こんにちは
先ほど帰って来ました、合計のコード有難うございました。当然ながらうまく
行きました。

>あれ?どうだったかな? こんな時は、その部分だけのマクロ記録をとってコードを生成して
>それをコピペ。
>あるいは、これは使えそうだなと思うコード部品を、自分用のライブラリーとしてファイルしているんですが
>そこから、1〜2行、コピペ。
私もそのようにしていきます。

       Next
>      .Offset(, mm - 2).Value = mmV
>       z = .Rows.Count
      1.z = .Rows.Count---の意味は、月を表す行を計算するという事で
       z = .Rows.Count End Withの手前にコードを入れておられるの
       ですね。
       z = .Rows.Count
       End With
   では、 .Range("B2:N2").FormulaR1C1 = "=SUM(r[1]c:r[" & z & "]c)"
    .Select迄は、z = .Rows.Count End Withの手前に書かず次に書かれ
   いるのはどういう理由なのでしょうか?
  
  2. "=SUM(r[1]c:r[" & z & "]c)"の意味、相対指定ですね、

【74402】Re:月ごとの転記
発言  UO3  - 13/5/29(水) 17:39 -

引用なし
パスワード
   ▼愛子 さん:

こんにちは

>1.z = .Rows.Count---の意味は、月を表す行を計算するという事で
> z = .Rows.Count End Withの手前にコードを入れておられるのですね。

z = .Rows.Count がくくられている With は With .Range("A3", .Range("A" & .Rows.Count).End(xlUp))
つまり、A3から始まって、名前が存在するA列の最後のセルまでの領域です。
ですから、その .Rows.Count は、その領域のセル数、つまり人数ということで、これを取得するために
End With の前に実行しています。
(End With が実行されてしまうと、このくくり情報がなくなってしまうので)

>では、 .Range("B2:N2").FormulaR1C1 = "=SUM(r[1]c:r[" & z & "]c)"
>End Withの手前に書かず次に書かれいるのはどういう理由なのでしょうか?

End With の前に書くと、A3:A● の領域を相手にしますね。
で、ここでは、その領域ではなく B2:N2 という 横の行領域(書く列の行形式領域)を相手にしたいわけです。

End With で、A3:A● に対する With がリセットされますと、今度は、その上の With で、まだ End With が
記述されていないもの、つまり、With Sheets("一致") が有効になります。
(With/End With のネストといいますか、二重になっています。)

ですから、.Range("B2:N2") は Sheets("一致").Range("B2:N2") ということになり、式をセットすべき
正しい領域を際示しているわけです。

>2. "=SUM(r[1]c:r[" & z & "]c)"の意味、相対指定ですね、

そうですね。式は、ご存知だと思いますが =SUM(C3:C10) のように記述する 【A1形式】というものと
R 行の値 C 列の値 といったものを使って記述する 【R1C1形式】というものがあります。
今回、A1形式でも書くこともでき、また、そのほうが見た目、わかりやすかったかもしれませんが
ついつい、R1C1形式を使ってしまいました。

R1C1形式では

R10 これは 絶対指定で 10行目 ということになります。また C5 これは 5列目という絶対指定になります。
一方 R[1] と書きますと、その式がセットされるセルから1つ下にいったセルという意味になります。
C[10] と書きますと、式のセルから右に10セル移動したセルということになります。

で、単に R とか C とだけ記述しますと、その式のセルと同じ行 とか、その式のセルと同じ列 というように
みなしてくれます。

【74403】Re:月ごとの転記
質問  愛子  - 13/5/29(水) 20:40 -

引用なし
パスワード
   ▼UO3 さん:
相対指定について、2回読み直して理解しました。有難うございます。

最後に、聞き忘れていましたが、
1.同じ名前の金額を加算するコードは、
下記コードの内、
dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Valueが
加算するコードだったでしょうか?

2.今回、集計でE列の名前に対してL列の金額を一致に転記する方法は、わかりましたので、将来の応用として、E列の名前に対して、L列以外にF列又はG列等追加をする場合を想定して、下記コードを加えたのですがエラーになりました。
追加する為には、どんなコードを入れたらよろしいのでしょうか?

dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Valueに+c.EntireRow.Range("F1").Valueをプラスしてもエラーが出ます。

(1.2.共、今後利用出きるコードとして、私も諸先輩方の真似をし、ファイルにして残しておこうと思っていますので。)

【74404】Re:月ごとの転記
発言  感想  - 13/5/29(水) 21:20 -

引用なし
パスワード
   誤解しているようですので、とりあえず誤解を正します。

> >これを計算式で得ようとしたら
> > ・月 が4以上 なら (月 - 1)
> > ・月 が4未満 なら (月 +12 - 1)
> >となりませんか?
> >それほど難しい話ではないはずです。
> 意味合いは解ります。 しかしそれをどんなコード使って書くかが解りません。
> はっきり言って構文が出来ないのです。

  If 月 >= 4 Then
    列 = 月 - 1
  Else
    列 = 月 + 12 - 1
  End If
ですが、それほど難しい構文ですか? やる気が無いだけと見えました。

【以下は、エールと受け止めて下さい。】

すでに回答されていて一件落着ですが、それはそれでひとつの対応方法でしょう。
ただし、別の考え方もあるということで参考にメモしておきます。

> たとえ調べて少し解ったとしても、まっとうする為には、下記コード以外に
> 色々使うと思うのです。

最初から模範答案を目指すことはないのです。
模範答案が書けないから、一歩も先に進めない、進まないというのは妙な話です。

必要最小限の機能に絞って、まずは骨格を、すこし不格好でも作ることです。
例えば、InputBoxの入力範囲のチェックとか、場合によってはキャンセル処理も
最初は端折ってもいいのです。

自分で一歩を踏み出して、ここまではできた、ここが判らないと書いてもらえば
OKだと思います。
それがあなたのためになるわけですし、
質問者さんは殆どの方がそのようにしてらっしゃいますね。

ご自分にだけ、なにか特殊事情がある、と考える必要もないと思います。
一行も書けないということなら、初級テキストに戻るべきですが、
そうでもないと思いますから、このようなことを書いています。

誰のサポートも受けずに、すべて一から自分でというのは難しい。
それはわかります。
しかし、ヒントも、同様のコード例もあるんですよ。
これを逃して何時やるのですか、今じゃないですか?

ただ本を読んだだけで、すっとコードが書ける人はいません。
実地の経験を積み重ねていくしかないのです。
コードをステップ実行したり、振る舞いを研究する、自力で同種のものを作ってみる、
こうして、実際に手を動かして学んでいくほかに、マスターする手段はありません。

特別の準備は要りません。(もちろん、初級テキストが手元に必要でしょうし、
簡単な文法は押さえておく必要がありますが)

そうした機会を迎えているのに、あなたは先送りしている。
臆病なのか、怠惰なのか知りませんが、私には信じられない。

業務上の要請で、どうしても今すぐコードが要るというなら、
上司に相談して外部委託すべきです。(UO3さんもそう指摘されていましたね。)

# 内容的に見て、そのようなものとも思えないので、
# 学びながらで十分間に合うように思います。

時間がないとかの理由は、正直申し上げて、コードを入手するための方便の
ように見えますし、
何よりも、力をつけるための貴重なチャンスを逃している点がとても残念です。

どうも長々と失礼しました。

【74407】Re:月ごとの転記
発言  愛子  - 13/5/30(木) 0:33 -

引用なし
パスワード
   ▼感想 さん:
厳しい意見、有難うございます。
本当に言われる事はごもっともです。

只、教えて頂いたコードの説明を見ましたら、ああそういう事ですね、とわかるのですが---
作りたいコードとコードの組み合わせがわからないので、ヒントがあると言われてもどこを利用すれば言いかわかりません。

とにかく、自分で作りたいものを決めて、簡単な事から(私にとっては難しい事
かもしれませんが)諦めずにコードを作ります。

【74408】Re:月ごとの転記
発言  UO3  - 13/5/30(木) 9:29 -

引用なし
パスワード
   ▼愛子 さん:

おはようございます

>1.同じ名前の金額を加算するコードは、
>dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Valueが
>加算するコードだったでしょうか?

そうです。名前をキーにした辞書(dic)にその金額が入りますので。
その金額 = 加算前の金額 + 現在のL列の値
こういったことをしています。

>2.E列の名前に対して、L列以外にF列又はG列等追加をする場合を想定して、下記コードを加えたのですがエラーになりました。

エラーになった場合、どういうエラーだったのかが、回答者にとっては必要になります。
構文エラーとか、あるいはコンパイルレベルでエラーになったのか、実行時にエラーになったのか。
それぞれに、何かしらメッセージが出ていますから、それを教えてもらう必要があります。

書かれたコードがアップしたとおりの

dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Value + c.EntireRow.Range("F1").Value

だったとすれば、"F1" が全角の F になっていますが、VBAは、ここは 通常にF1 とみなしてくれます。
(でも、ちゃんと半角で "F1" と記述すべきですが)

で、ここでエラーになるとすれば、加算しようとしている F列に【数値以外の】何かがはいっていて
【型が違います】というエラーには、なりますね。そんな時、このコードが黄色く光ってとまるわけですが、
この c.EntireRow.Range("F1").Value の上にマウスをもっていくと、加算しようとしている値がうかびあがります。
どんな値が浮かび上がったでしょうか?

ついでにというか、皆さんからもでているんですが、複雑な機能を組み合わせたコードを作り上げなければいけないとしても
その一部分、一部分を切り離して、たとえば セル範囲のループだけ とか、あるセルの値を判定して分岐させる部分だけ
とか、そのような、テストドライバーコードを書き、個々に確認しながら、OKになったものを組み合わせるというやりかたが
急がば回れで、早道になることが多いですね。最初から組み合わせた完成形のコードにしますと、個々の記述がわるいのか、
組合せがわるいのか、その判断に悩まなきゃいけなくなるリスクがありますので。

【74409】Re:月ごとの転記
発言  愛子  - 13/5/30(木) 10:55 -

引用なし
パスワード
   ▼UO3 さん:
申し訳ありません、こんな事を書くのはよくないと思いますが、
母を今から病院につれて行きます。
午後から改めて確認を致します。
ご了承ください。

【74410】Re:月ごとの転記
発言  愛子 E-MAIL  - 13/5/30(木) 14:12 -

引用なし
パスワード
   ▼UO3 さん:
こんにちは、

私がエラーを出した時点では
>dic(c.Value) = dic(c.Value) + c.EntireRow.Range("L1").Value + c.EntireRow.Range("F1").Valueのように追加を2段目に書きました。

エラーの記述は、コンパイるエラー 修正候補:行番号または行ラベルまたはステートメントまたはステートメントエラーの最後 でした。

UO3様の前回の回答でFの大文字、追加の配置を一列になっているのを見まして、長いですが、一行にすると変わるのかなあと思いまして、
一行にしますとエラーは無くなりました。
ちょっとの違いですが---(苦笑)お手間取らせてすみませんでした。


>ついでにというか、皆さんからもでているんですが。
色々方法を教えて頂き有難うございます。実践してみます。

【74411】Re:月ごとの転記
お礼  愛子 E-MAIL  - 13/5/30(木) 18:55 -

引用なし
パスワード
   お力添えを頂きました皆様、心より感謝致します。
本当に皆様の貴重なご意見を無駄にしません。
実践していきます。

【74412】Re:月ごとの転記
お礼  愛子 E-MAIL  - 13/5/30(木) 20:10 -

引用なし
パスワード
   ▼佳 さん:
こんばん、
お礼をお伝えするのを忘れていました。
下記のアドバイス、有難うございます。
焦らずコツコツしていきます。


>2〜3日たったらもう一度、どんなふうに分かったか思い返してみて
>下さい。なにも見ずにあたまの中でおさらいしてみて下さい。
>それですこしでも分かってない部分が見つかったら、
>再度本スレを読み返してみて。それでも引っかかるようなら、
>そこは愛子さんが理解するにあたって、本当に大切な部分と思われるので、
>
>遠慮は要りません、どう分からないのか書ける範囲で書いて、説明を
>求めて下さいね。

1451 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free