• ベストアンサー

VBA 表作成したい

pkh4989の回答

  • ベストアンサー
  • 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さんありがとうございます!! 月ごとのできました。 線を書き直すのは手動ではないとだめでしょうか?

関連するQ&A

  • 日付が入っているだけ表を作成したい

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

  • VBA 表作成

    こんにちわ。 表が完成しました。 しかし、後3つの課題が残されています。 ネットで見ても今ひとつわからなかったので再度質問させていただきました。ブックは全部で3つになります。 →入力フォーム、出力、入力 質問1 アラートは表示されずに上書きもなく保存させたいです。 ・入力フォームで入力された日付で保存。(入力する場所はC6でyyyy/m/d/という形です。) ・同じ日付の場合は上書きではなくその日付に何か解るように足せられたものが名前になるようにしたいです。 保存のやり方はわかるのですが上記2つが解りません 質問2 保存が終わって指定したブックのみ閉じたい。 ・入力データを閉じたいです。 解りづらいかもしれませんがよろしくお願いします。

  • VBA表作成 再

    頭がこんがらがってしまい途中でしめさせていただきました。改めて整理がついたので質問をしたいと思います。 VBAを使い表を作成しています。 まず入力フォームというブックがあり、そこに入力した日付より1ヶ月分のデータを日付、曜日などを別ブックにある予めできている表に貼り付けていきます。表には31日分の表(罫線あり)が出来ています。 ☆一つ目 Datediff("d",wSh1.Range("C6"),Dateadd("m",1,wSh1range("C6"))) を使いその月の日数を求め表からいらない分の表を削除。 例えば)2/1を入力した際に31日分もいらないため2つ削除。 削除したら入力した日付から1ヶ月間の日付と曜日を貼り付ける。 表は   L ・・・ 4 日付・・・ 5 曜日・・・ ・ ・ ・ のようになっています。 ここまでにいく前に次のような処理をしましたのでソースを載せます。 Private Sub CommandButton1_Click() Dim wStr As String Dim wDate As String Dim wDate2 As String Dim Exitflg As Boolean Dim i As Integer Dim wVal As Variant Dim wSh1 As Worksheet Dim wSh2 As Worksheet Dim iStartRow As Long Dim iEndRow As Long Dim wDay As Long Set wSh1 = Workbooks("入力フォーム.xls").Worksheets("日付セット") If wSh1.Range("C6") = "" Then '値が入っているか MsgBox "日付を入力してください!" Exit Sub End If wDate = Replace(wSh1.Cells(6, "C"), "西暦", "") wDate = Format(wSh1.Cells(6, "C"), "yyyy/mm/dd") If Date < wDate Then MsgBox "未来の日付入力はできません!" Exit Sub End If If DateAdd("yyyy", -1, Date) > wDate Then MsgBox "日付を今日から1年以内で設定してください!" Exit Sub End If わかりづらいかもしれませんがよろしくお願いします。

  • VBAで表作成中解らないことだらけ・・・ひとつずつ教えてください。

    ブックの種類 入力フォーム→日付を設定するフォーム画面です。 book→予め出来ている表(B5・B7・B9・B10・I5はタイトル?になります)    B  I   L ・・・ 4         日付・・・ 5 商品名 コード 曜日・・・ 6 商品名 コード 数値・・・ 7   小計    数値・・・ 8 商品名 コード 数値・・・ 9   小計    数値・・・ 10  合計    数値・・・ 入力データ→日付(曜日)、区分、商品名、商品数、コードが表になっています。 まず入力フォームで日付をセットします。 次にbookに入力フォームで入力した日付から1ヶ月間を表示させます。 (1) 日付設定表に設定日付をキーにして入力データブックより検索 (2) 検索日付が一致すれば、該当商品名、コード、区分、商品数等を取得 (3) 区分:1の場合は、該当日付の下の6行に、区分:2の場合は、8行に設定(同一商品の場合は加算) 但し、新しい商品の場合は行を追加→ 区分:1の場合は6行以降に、区分:2)の場合は8行以降に追加する (4)区分ごとの小計を表示 (5)合計を表示 (6)bookのみ処理した日付と時間で保存 (7)入力データのブックを閉じる。 出来ているところは日付を貼り付けるまでは教えてもらいながらですができています。 明日中とのことなのでよろしくお願いします。

  • VBAで表作成

    こんにちわ VBAを使い表を作っているのですが、入力フォームで日付を入力しコマンドボタンを押すと別ブックになり、予め用意してある表に入力した日付から1ヶ月の日付が貼り付けるというのをやっています。 マクロを記録し試してみたところ構文エラーが出てしまいました。 日付を貼り付けるところまでできたのですが・・・ 表には線がすでに入っています。 入力された最後の日付のところで太線で表を閉めたいのですができますでしょうか。 構文エラーになったソースを貼り付けます。 Range((4,"i"+12):(10,"i"+12)).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlHairline .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With よろしくお願いします

  • VBA 表作成 再 続

    引き続きよろしくお願いします。 入力データというブックがありそこには B列に日付と曜日(日付の下)3行目~、 M列に区分(1か2が入力)3行目~、 T列に商品名3行目~、 AQ列に商品数3行目~、 BA列4行目~にコードが入力されています。 日付を入力したブックに 入力データにある、日付の部分を見て入力フォームで日付から1ヶ月の間の日付で一致すれば、商品名、コードを別ブックにある表に貼り付けます。日付部分の表に数値を商品名とコードにあわせて貼り付け、日付も、商品名もコードも同じであれば足してから表示します。 元にあるのはひとつ分しかはいらないので増えるたびに行数を挿入していくようにします。 最初にある表は    B   M   L ・・・ 4          日付・・・ 5          曜日・・・ 6  商品名 コード 数値・・・ 7          小計・・・ 8  商品名 コード 日付・・・ 9          小計・・・  10         合計・・・ という表になっています。上段には区分1、下段には区分2のものが入ります。 わかりますかね・・・;; 説明下手で申し訳ありません よろしくお願いします

  • VBA 表作成 続続

    以前何度もこの「VBA表作成」というタイトルで何度か質問させていただきました。 前回の締め切りのあと何度もデバック?やってみながら訂正してみたりしたのですが出来ませんでした。 ☆詳細(仕様?) ・入力フォームブックで日付を入力すると出力ブックに入力した日付から1ヶ月の日付が表示されます。 ・入力データブックがあり入力フォームで入力した日付から1ヶ月の日付で入力データにあるデータを貼り付けます。 ・重複したデータは足して表示させます。 ☆入力データブック ・B列に日付:日付の下に曜日が表示されています。 ・M列に区分:1か2が書いてあります。 ・T列に商品名:結合は関係ないとは思いますが、TからAPまで結合されています。 ・AQ列に数量:AQからAUまで結合されています。 ・BA列にコード:表示上記4つに比べ1行下に表記されていてBAからBDまで結合されています。 ☆出力ブック ・BからHまで結合されており、B6に商品名が表示されます。(現時点では商品1つ分しかないので増えるたびに1行ずつセルが結合され挿入されます ・IからKまで結合されており、I6にコードが表示されます。(これも上記と同じ) ・6行目~→区分1の場合・8行目~→区分2の場合に表示します。 (1)出力ブック(以下book)の表は品名とコードを表示する部分が結合されているのですが、挿入され別の値が表示となったときに結合されておらず、コードも表示されませんでした。 (2)入らないはずの所に数値が入ってしまいます。 (3)入るはずの所に値が表示されません(8行目以降の欄) ・品名:B5からH5まで結合されています。 品名が表示されるのはB6からH6までで挿入されるときも結合されて表示されたいです。 ・コード:I5からK5まで結合されています。 コードが表示されるのはI6からI6までで挿入されるときも結合されて表示されたいです。 Sub Get_nyuryoku(wDate As String, hNm As String, hCd As String, hKbn As String, s As Integer) Dim wData As Worksheet Dim i As Integer Dim mR As Long Set wData = Workbooks("入力データ.xls").Worksheets("Sheet1") With wData mR = .Cells(Rows.Count, "B").End(xlUp).Row For i = 3 To mR If .Cells(i, "B") = wDate Then '←ここで両方の日付を確認 hNm = .Cells(i, "T")  ←商品名 hCd = .Cells(i, "BA") ←コード hKbn = .Cells(i, "M") ←区分 s = .Cells(i, "AQ")  ←数量 Exit For End If Next End With End Sub お手数掛けますがよろしくおねがいします。 他に書かなきゃいけないことがありましたら言ってください。

  • エクセルVBAでのスケジュール作成

    いつも大変お世話になっております。 本日も質問させてください。 会社指定の異なる2つのブックのエクセル表に自分の部署の社員全員のスケジュールを入れなければいけません。 (1つは月間、もう1つは週間で、それぞれ各月、各週毎にシートがあります。) VBAのフォームを作成し、週間スケジュールは自動でセットできるようになりました。 ですが、月間のスケジュールがうまくいかなくて困っています。 (入力フォームは共通のものを使用します。) スケジュールの表はシートが月別になっていてA列に社員名、1行目に日付、2行目に曜日、3行目に祝日が表示されるようになっています。 4行目からが各社員のスケジュールですが、1人の1日分のスケジュール入力のセルは2列×3行=6セルです。 (わかりにくいので図で表現したかったのですが、ずれて表示されてしまって余計にわかりにくいのでやめてみました。ちなみに、1人目の1日目のスケジュールのセル範囲はB4:C6となります。) そして、各セルには入力する項目が決まっています。 (この項目についてはフォームで作成済みです。) セルが多いため、Rangeを使おうと思っても指定するのが困難です。 個人的にはRangeのセルの値を別シートに作成した表からindexで検索できたらなぁ。と思っています。 できるかどうかすらわかっていませんが。(汗) もちろん、もっと効率的な方法があればそちらを教えていただきたいです。 週間スケジュールのセルから入力値をもってくる事も考えたのですが、月間は1日から必ず始まっていますが、週間は月曜日からのため、月や週によって日付が異なることなどから、やはり私には難しいのです。 よろしくお願いします。

  • VBAでプルダウンの表示

    VBAの勉強をしております。 ブックを開いたときに、プルダウンのユーザーフォームが表示され、 そしてプルダウンにはブックを開いた日から1年間の年月日が表示される処理を作りたいと思っております。 処理としては (1)ユーザーフォームがブックを開かれると表示される (2)ブックを開いたときにそのときの日付を取得する (3)その日付から1年間をプルダウンに表示する  (例)例えば質問日の7/22にブックを開いたとすると     「201507」「201508」「201509」「201510」・・・のように年と月を表示するようにしたいです。 そこで現在この処理を行うのにブックを開いたときにユーザーフォームを表示するようにはできたのですが、プルダウンで1年間を表示するにはどうしたらいいのでしょうか。 1、シートに「201507」~「201712」ぐらいまでをA列に記載し、 2、ブックを開いた日付を取得し、その日付を「YYYYMM」の形にし、 3、シートのA列を上から順に検索し、同じ数値のが見つかるまで検索する 4、見つかったら、そこの行数を読みとり、そこから12個分下にある数値を読み取り 5、それをプルダウンに表示させる という処理の流れを考えたのですが、実際にどうVBEに書いたらいいかわかりません。

  • VBA教えてください。(表の作成)

    いつもお世話になっております。 非常に手間となっている作業があり、VBAにしたら楽だろうと思うのですが、自分では作成できずにいます。複雑な内容になるのですが、教えていただける方、お願い致します。 Sheet1に表があり、Sheet2に必要事項のみを抜き出した表を作成したいです。 Sheet1は、横一行が1製品分の情報で、それが、数百行あります。2行目が項目名です。 V列が製品種類、W列が製品名、AV列に番号があります。番号は数字のときも、カナのときもあります。 Sheet2は、V列(製品種類)、W列(製品名)で分類した表になっていて、AV列(番号)を列記したいです。 一枚に印刷したいため、入り組んだ表になります。 この表は、内容が追加されたりと、流動性があるため、それに対応できるようにもしたいと考えています。 今考えていたのは、 Sheet2の右のスペースに、表にするための情報入力するスペースを作り、 Q(通称、Sheet1の表にはない、特に意味はないです)、R(製品種類)、S(製品名)、T(Sheet2の入力箇所を指定) RとSの内容でsheet1のオートフィルタ、 Sheet1のAV列(番号)をコピーして、sheet2のTで指定したところに貼り付ける。 それを上から順に繰り返す。というものです。 ※1 RとS→Sheet1のAV(番号)をT(入力箇所)に格納ですが、T(入力箇所)に入るRとSは1つとは限らず、2、3種類あるものもあります。 ※2 同じT(入力箇所)のなかで、AV(番号)が重複する場合もあり、その際は、1回のみ入力したいです。  →例えば、R(ノート)&S(A社用)(T(N6)に入力)でAVが7000、R(ノート)&S(A社用)(T(N6)に入力)でAVが7000 この場合は7000、7000ではなく、7000にしたいです。 さらに、これを1日数回行います。 Sheet1の情報は、1日の中で下に追加されていき、削除されることも、順番が入れ替わることもありません。1日分の情報をまとめて1枚にしたいです。あとから同じ番号が出てくることもありません。 また、どこから追加されたのかが分かるようにもしたいのです。分かるようにというのは、太い罫線が入ってもいいですし、書体が変わってもいいですし、色が変わってもいいです。 例えば、1回目作成した際に(イ、エ1、ナ、タ1、タ2)のとき、2回目は(イ、エ1、ナ、タ1、タ2//ナ1、ミ、ヤ)というような感じです。3回目があっても追加です。 前回の内容は残す必要はなく、1日のなかで上書きで大丈夫です。日が変わると、Sheet1も一度空になり、その際にSheet2のデータもクリアにしますが、それは自分で作成できそうです。 どうぞよろしくお願い致します。