Excel VBA質問箱 IV

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

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


262 / 13645 ツリー ←次へ | 前へ→

【81264】形を変えて表を転機したい よっちゃん 20/4/28(火) 17:21 質問[未読]
【81265】Re:形を変えて表を転機したい マナ 20/4/28(火) 19:12 発言[未読]
【81266】Re:形を変えて表を転機したい よっちゃん 20/4/28(火) 22:16 質問[未読]
【81268】Re:形を変えて表を転機したい マナ 20/4/29(水) 8:10 発言[未読]
【81274】Re:形を変えて表を転記したい よっちゃん 20/4/30(木) 0:58 発言[未読]
【81282】Re:形を変えて表を転記したい よっちゃん 20/5/7(木) 9:34 お礼[未読]

【81264】形を変えて表を転機したい
質問  よっちゃん  - 20/4/28(火) 17:21 -

引用なし
パスワード
   表の転記について、ご教示いただきたくよろしくお願いします。
シート1に入力された表を、シート2に形を変えて転機する作業を自動化したい。
シート1の中段にある表の内容をシート2の指定箇所に、
リストの形で、かつ各項目を指定した月数分表示したい。

表の中は、ランダムに必要な個所のみが入力されている状態です。
*列はB22:F22に項目名

シート1には
行 A B C D
23 あ    い
24 う  え
25 か    

行数は変動あり。
月数は、20/4月〜21/1月のように、別セルに指定。
月は、同セル内にあ+月で表示したい
書き出し後は、シート2に
A あ(20/4月分)
A あ(20/5月分)
A あ(20/6月分)
A あ(20/7月分)
A あ(20/8月分)
A あ(20/9月分)
A あ(20/10月分)
A あ(21/1月分)
A う(20/4月分)
A う(20/5月分)
A う(20/6月分)
A う(20/7月分)
A う(20/8月分)
A う(20/9月分)
A う(20/10月分)
A う(21/1月分)
A か(20/4月分)
A か(20/5月分)
A か(20/6月分)
A か(20/7月分)
A か(20/8月分)
A か(20/9月分)
A か(20/10月分)
A か(21/1月分)
C え(20/4月分)
C え(20/5月分)
C え(20/6月分)
C え(20/7月分)
C え(20/8月分)
C え(20/9月分)
C え(20/10月分)
C え(21/1月分)





の形で、セルを分けて、項目、入力内容+月の順に表示させたいです。

似ている作業を配列でしている方がいらっしゃいましたが、
理解しきれず、月を足して行を増やすやり方もわかりませんでした。

できるだけ構文を短く、ループなどでダラダラ長くなってしまわないように、
考えたいと思っています。

アドバイスのほど、宜しくお願いいたします。

【81265】Re:形を変えて表を転機したい
発言  マナ  - 20/4/28(火) 19:12 -

引用なし
パスワード
   ▼よっちゃん さん:

>シート1には
>行 A B C D
>23 あ    い
>24 う  え
>25 か 

何行目にあるかは、結果に影響しないということですか。

項目Cについて、「え」が24行目でも、23行目でも
シート2への転記結果は、同じですか。

>行数は変動あり。

では、シート1の表が何行あるのか、どどうすれば判断できますか。

【81266】Re:形を変えて表を転機したい
質問  よっちゃん  - 20/4/28(火) 22:16 -

引用なし
パスワード
   ▼マナ さん:
お返事ありがとうございます。
一つ目の確認事項ですが、
答えは、はい。です。

例に挙げた表の場合、

A あ(2020/4月)
・・省略
A あ(2021/1月
A う(2020/4月)
・・省略
A う(2021/1月)
A か(2020/4月)
・・省略
A か(2021/1月)
C え(2020/4月)
・・省略
C え(2021/1月)
D い(2020/4月)
・・省略
D い(2021/1月)

という結果になります。
Aの項目にあるものから順にリストにしたいんです。

22行目に項目、23行目以下に内容が入っているので、
A,B,C,Dそれぞれの最終行取得して、一番下にあるものを確認して何行目まであるか確認していました。
多くても、一つの項目で10行くらいに収まるようにはしていますが、
今のところそれが絶対ではないので、行数を最初から固定していませんでした。

すみません、知識が乏しくそういった単純なものしか浮かばずなので、
みなさんのアドバイスをいただきたく、投稿させていただいた次第です。

よろしくお願いします。

>▼よっちゃん さん:
>
>>シート1には
>>行 A B C D
>>23 あ    い
>>24 う  え
>>25 か 
>
>何行目にあるかは、結果に影響しないということですか。
>
>項目Cについて、「え」が24行目でも、23行目でも
>シート2への転記結果は、同じですか。
>
>>行数は変動あり。
>
>では、シート1の表が何行あるのか、どどうすれば判断できますか。

【81268】Re:形を変えて表を転機したい
発言  マナ  - 20/4/29(水) 8:10 -

引用なし
パスワード
   ▼よっちゃん さん:

>多くても、一つの項目で10行くらいに収まるようにはしていますが、

Option Explicit

Sub test()
  Dim 表 As Range, 転記先 As Range
  Dim 期間 As String
  Dim s
  Dim 列 As Range
  Dim r As Range, c As Range
  Dim 項目 As String, 内容 As String
  Dim n As Long
  Dim 開始月 As Date, 終了月 As Date
  Dim d As Date
  
  Set 表 = Sheets("Sheet1").Range("B22:F22").Offset(1).Resize(100)
  Set 転記先 = Sheets("Sheet2").Range("A2")
  期間 = "20/4月〜21/1月"
  
  s = Split(Replace(期間, "月", ""), "〜")
  開始月 = DateValue("20" & s(0) & "/1")
  終了月 = DateValue("20" & s(1) & "/1")
  
  For Each 列 In 表.Columns
    Set r = Nothing
    On Error Resume Next
    Set r = 列.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    If Not r Is Nothing Then
      項目 = 列.Cells(0).Value
      For Each c In r
        内容 = c.Value
        d = 開始月
        Do
          n = n + 1
          転記先.Cells(n, 1).Value = 項目
          転記先.Cells(n, 2).Value = 内容 & Format(d, "(yy/m月分)")
          d = WorksheetFunction.EDate(d, 1)
        Loop Until d > 終了月
      Next
    End If
  Next

End Sub


 

【81274】Re:形を変えて表を転記したい
発言  よっちゃん  - 20/4/30(木) 0:58 -

引用なし
パスワード
   ▼マナ さん:

ありがとうございました。

参考にさせていただき、実際に動かしてみます。
初めて使う構文もあるので、調べながら使ってみますが、
わからなかったら質問させていただいてもいいですか?

他に、こんな方法もあるよ!という方も、アドバイスいただけたらと思います。

【81282】Re:形を変えて表を転記したい
お礼  よっちゃん  - 20/5/7(木) 9:34 -

引用なし
パスワード
   わからないことなどあるかもしれませんが、一旦クローズさせていただきます。
マナさん、ありがとうございました。

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