• ベストアンサー

VBA 表作成したい

こんにちわ 別ブックで入力した値から1ヶ月分の日付を表示させていく表を作成したいのです。 すでに表の元は完成していて、31日入るようになっています。 線もひいてあります。 ですが、入力日によっては31日の所もあれば30日の場合もあり、28日の時や29日の時もあると思うんです。 それに対応する形で表に埋まった日付の分だけの表をVBAで作成したいのですが、処理をするたびに随時変更できるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

引き続き・・・ 日付を表示するエリアに予め枠を作ってください。 それから、29日までの場合は30日から31日までのカラムを非表示する方法が良いと思います。 以下の部分を変更してみてください。 29日まである場合は、30日カラムから31日カラムまで非表示します。 但し、枠(線)の引き方法によって非表示した右カラムの線が表示されない場合がありますので、 その時は、右の線を再度引いてください。 31日まで右の線があると思いますが、32日カラムを選択して罫線の左側を再度設定してください。  wI = 0  Exitflg = False  wSh2.Columns.EntireColumn.Hidden = False  '入力日付より1ヶ月分の日付と曜日を表示  Do While Exitflg = False   wStr = DateAdd("d", wI, wDate)   If wStr = wDate2 Then    Exitflg = True    If wI < 31 Then         'カラム非表示     wSh2.Columns(toA1(wI + 11) & ":" & toA1(31 + 11)).EntireColumn.Hidden = True    End If   Else    '日付設定    wSh2.Cells(4, wI + 11) = Format(wStr, "mm/dd")  '月/日    '曜日設定    wSh2.Cells(5, wI + 11) = wVal(Weekday(wStr) - 1)   End If   wI = wI + 1  Loop End Sub Public Function toA1(ByVal wNo As Integer) As String  toA1 = Trim(Cells(1, wNo).Address(False, False))  toA1 = Left(toA1, Len(toA1) - 1) End Function

ka2ari1226
質問者

補足

pkh4989さんありがとうございます!! 月ごとのできました。 線を書き直すのは手動ではないとだめでしょうか?

その他の回答 (2)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

もちろん、マクロで出来ますが、質問の内容だと、枠の範囲(31日の場合) 「行の先頭・最後、カラムの先頭・最後」がはっきりしないので、 この方法にしました。別に非表示にしても、問題ないでしょう。

ka2ari1226
質問者

お礼

ほんとにありがとうございました!! 会社の研修で勉強しているのでわかりやすく勉強不足の私に説明してくださりありがとうございます。 また何かわからないことがあればよろしくお願いします

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.1

できますが、どのようなVBAを組めばいいかは表のレイアウトによって変わってきますので、この情報だけでは適切なアドバイスはできないと思います。 場合によっては別にVBAを使わなくても作れる場合もあります。 ・表の元はどのようなレイアウトになっているのか。 ・作成したいレイアウトはどのようなレイアウトにしたいのか。(元ファイルからの抜き取り?全く異なるレイアウト?) ・何をキーにして自動的にカレンダーを作成したいのか。(入力した日付から1ヶ月間?入力した月のカレンダー?) 上記の情報があれば、とりあえずとっかかりとしてアドバイスはできるかもしれません。

ka2ari1226
質問者

補足

説明不足で申し訳ありませんでした。 入力フォームというブックでボタンを押すと別ブック(出力元)というブックに予めできている表に貼り付けていきます。 ☆表   L・・・ 4 日付・・・ 5 曜日・・・ 簡潔すぎでしょうか・・・? ☆ソース wVal = Array("日", "月", "火", "水", "木", "金", "土") wDate = wSh1.Cells(6, "C") '←入力日付 wDate2 = DateAdd("m", 1, wDate) '←入力日付より1ヶ月 i = 0 Exitflg = False Do While Exitflg = False '入力日付より1ヶ月分の日付と曜日を表示 wStr = DateAdd("d", i, wDate) If wStr = wDate2 Then Exitflg = True Else wSh2.Cells(4, i + 12) = Format(wStr, "mm/dd") '月/日 wSh2.Cells(5, i + 12) = wVal(Weekday(wStr) - 1) '曜日 End If i = i + 1 Loop というようなソースがあります。 コレに入れていくと思うのですが・・・ わかりません。 ※やりたいことは日付と曜日を貼り付けていき日付と曜日が最後の所までの表をつくりたいんです。 説明が下手で申し訳ありません…

関連するQ&A

専門家に質問してみよう