- ベストアンサー
VBA 表作成
こんにちわ。 表が完成しました。 しかし、後3つの課題が残されています。 ネットで見ても今ひとつわからなかったので再度質問させていただきました。ブックは全部で3つになります。 →入力フォーム、出力、入力 質問1 アラートは表示されずに上書きもなく保存させたいです。 ・入力フォームで入力された日付で保存。(入力する場所はC6でyyyy/m/d/という形です。) ・同じ日付の場合は上書きではなくその日付に何か解るように足せられたものが名前になるようにしたいです。 保存のやり方はわかるのですが上記2つが解りません 質問2 保存が終わって指定したブックのみ閉じたい。 ・入力データを閉じたいです。 解りづらいかもしれませんがよろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 完成、お疲れ様でした。 ファイルの保存方法と閉じる方法です。 プログラムに合わせて修正してください。 '< 質問1 > Set wSh1 = Workbooks("入力.xls").Worksheets("日付セット") wDir = "C:\" '←保存先のフォルダ Flnm = wDir & Format(wSh1.Cells(6, "C"), "yyyymmdd") & ".xls" ' If Dir(Flnm) <> "" Then '存在したら、時間(時分秒)を加算 wStr = Format(Now, " hhmmss") Flnm = Left(Flnm, Len(Flnm) - 4) & wStr & ".xls" End If '保存 Workbooks("日付.xls").SaveAs Filename:=Flnm '< 質問2 > '入力データを閉じる Workbooks("入力データ.xls").Close
その他の回答 (5)
- pkh4989
- ベストアンサー率62% (162/260)
本来はプログラム上では、罫線は書かない方が良いですよ。 どうしてもプログラム上で罫線を書かなければ行けないのは設計のミスです。 今のように行を追加したり、罫線を書いたりするのは、望ましくないですね。 不具合発生の元ですので、実際に実務では、改めて枠を設定したテンプレート 「必要な行、カラムの枠を用意」を開いて利用するのです。 プログラム上では、単純にテンプレートを開いて、内容を設定した後に不要な行・カラムは非表示にするか 必要な部分のみ印刷するとか、方法は沢山あります。 でも今のプログラムみたいに、最初に正しく枠を設定しておけば、行を追加しても 自動的に枠が表示されますので、プログラム上で一々罫線を書かなくても済むのです。 ここでは、結合セルでも、行を追加時に枠が自動的に表示されますよ。 追加時に枠が生成されないのは、初期枠設定の問題だと思います。 まあ、課題なので、色々試した方が良いと思いますが ★マークのマクロをセル結合の下に追加してください。 <セル結合>上 .Range("B" & sTot1 & ":H" & sTot1).MergeCells = True .Range("I" & sTot1 & ":K" & sTot1).MergeCells = True ↓追加 .Range("B" & sTot1 & ":K" & sTot1).Borders(xlEdgeLeft).Weight = xlThin '★←追加(不要かも) .Range("B" & sTot1 & ":K" & sTot1).Borders(xlEdgeTop).Weight = xlThin '★←追加 .Range("B" & sTot1 & ":K" & sTot1).Borders(xlEdgeBottom).Weight = xlThin '★←追加 <セル結合>下 .Range("B" & sTot2 & ":H" & sTot2).MergeCells = True .Range("I" & sTot2 & ":K" & sTot2).MergeCells = True ↓追加 .Range("B" & sTot2 & ":K" & sTot2).Borders(xlEdgeLeft).Weight = xlThin '★←追加(不要かも) .Range("B" & sTot2 & ":K" & sTot2).Borders(xlEdgeTop).Weight = xlThin '★←追加 .Range("B" & sTot2 & ":K" & sTot2).Borders(xlEdgeBottom).Weight = xlThin '★←追加 線の太さは自分で調節してくださいね。
補足
お返事遅くなりました!! ありがとうございます!! 色々ためしながらやったらできました!! もしよかったらこれからもよろしくお願いします。 VBA初心者なのでマスターしたくて・・・ 「苦手分野~」ってところでまた書かせていただきました。 っていうより質問ってわけではありませんが・・・。 ぜひそこでもご教授お願いします。 ありがとうございました
- pkh4989
- ベストアンサー率62% (162/260)
仕方なですね。以下のマクロを追加してくだい。 以下のSub モジュールの中に「セル結合」下に1行追加する、「2ヵ所ありますよ」 変数が違いますので、注意! '商品情報の編集 Sub Edit_Shouhin(wSh2 As Worksheet) (上の方) 'セル結合 Range("B" & sTot1 & ":H" & sTot1).MergeCells = True Range("I" & sTot1 & ":K" & sTot1).MergeCells = True '下に追加 .Cells(sTot1, "I").Borders(xlEdgeLeft).Weight = xlHairline '★←追加 (下の方) 'セル結合 Range("B" & sTot2 & ":H" & sTot2).MergeCells = True Range("I" & sTot2 & ":K" & sTot2).MergeCells = True '下に追加 .Cells(sTot2, "I").Borders(xlEdgeLeft).Weight = xlHairline '★←追加
補足
お手数掛けてしまって申し訳ありませんでした!! 縦線はできました!! B I L・・・ 4 日付・・・ 5 品名 コード 曜日・・・ 6 7 小計 ・ ・ 上記の表からたとえば3行挿入になったとしますよね? そのときに上記では6と7の間にあった線が挿入の時もいるんですが・・・ B I L・・・ 4 日付・・・ 5 品名 コード 曜日・・・ 6 7 8 9 10 小計 ・ ・ となった場合、7と8の間、8と9の間に線が入っているんですがどうすればいいですか? 私がネットとか見て書いたソースです。 With Selection.borders(xlEdgeBottom) .Linestyle=xlLineStyleNone End With 違いますでしょうか
- pkh4989
- ベストアンサー率62% (162/260)
マクロは必要ありませんよ 日付を展開するブックのシートを手動で罫線(縦線:点線)を入れ直して、不要の線は消して 保存して置けば良いですよ。 そうすると、今のマクロで行を挿入する時に自動的に線が表示されますよ。
補足
できませんでした。 元の表には6行目と7行目の間に線が引いてあるんです。(書式設定から二重線の隣) ☆元の表(結合されている列は省きます) B I L・・・ 4 日付・・・ 5 品名 コード 曜日・・・ 6 7 小計 ・ ・ といった感じになっています。
- pkh4989
- ベストアンサー率62% (162/260)
シート上の初期罫線設定の問題だと思います。 以下の処理で解決出来ると思います。 (1)日付展開シートの範囲「B1:K12」を手動で選択する (2)セル書式設定→罫線→真ん中の縦線のみ「点線」を入れ直す (3)セル書式設定画面を閉じる→不要の縦線は消す「B1:K4」、「B12:K12」
補足
マクロの記録で行いコピーしてやりましたがどこにソースを入れたらいいかわかりません。 (1)と(2)はできましたが(3)のソースがわかりませんでした・・・ 引き続きお願いします
- n-jun
- ベストアンサー率33% (959/2873)
質問1の参考になるのでは。 VBAを使って名前をつけて保存をしたい(2) http://okwave.jp/qa4420440.html
補足
ありがとうございます!! できました!! もう一つ質問なんですが・・ 挿入した後に小計部分の線が下に入ってしまうのですがこれはどうすればいいですか? 品名とコードの間に点線もいれたいんです・・・ よろしくお願いします。