• 締切済み

excel VBA 新しいエクセルファイルの作り方

エクセルのVBAについて、 特定のエクセルファイル(Aとします。)の情報を 下記の場所にあるエクセルファイル原紙に "C:¥Users¥Desktop¥原紙.xlsx" 書き写して、同じ場所に 新しいエクセルファイルを作成したいです。 エクセルファイルAの C3の左から4文字を原紙のN12 C3の右から4文字を原紙のP12 D3を原紙のD12 E3を原紙のL12 F3には日付(例 2023/3/12)となっていて、 月だけを取り出して原紙のB12 日だけを取り出して原紙のC12 にしたいです。 尚、エクセルファイルAのデータは1行だけではないので、 上記を最終行までループしたいです。 ループ後に名前を付けて保存で "C:¥Users¥Desktop¥20230312.xlsx" のように、その日付名前で保存したいです。 また、日付毎にエクセルのファイルをわけたいのですが、 ここのやり方が全く思いつかず、困っています。 エクセルのファイルAの情報で F3から↓が 3/12 3/14 3/12 となっていた場合に3/12で一回ファイルを保存して、 3/14で新しく原紙ファイルを開いて、保存して 既に保存されている日付の場合は、そのエクセルファイルを 開いて("C:¥Users¥Desktop¥20230312.xlsx") 記入していくようにしたいです。 説明が難しく、複雑ですが どなたかご教授頂けないでしょうか。 初めからどのように書いたらいいか教えていただけると幸いです。 お手数をおかけしますが、回答よろしくお願いいたします。

みんなの回答

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

回答№3で、〈VBAの出る幕はありません〉と記述しました 数量×単価=金額計算を式では 金額のセル番地に〈=数量のセル番地*単価のセル番地〉と記述します  番地:EXCELのsheetに     列方向にA列、B列、...............Z列、AA列、AB列、     行方向に1行目、2行目、....................     列、行の組み合わせでA1,A2を番地と呼ぶ 添付図はセルC3の状態です セルCに〈=A3*B3〉と入力したのに式の計算結果が表示されます。 そのためA3、B3の値が変化しても表示は計算結果でよい これをVBAに置き換わることは出来ません AccessでのVBAの標準書式はセルでなくフィールドと呼び Private Sub フィールド名_イベント名()で始まりEnd Sub迄で  セットです ------------------------------------ Private Sub 単価_Exit(Cancel As Integer) 金額 = 数量 * 単価 End Sub ----------------------------------- AccessでVBAでフィールド名のイベントで起動する以外に  SUM関数のように  レコード数または金額金額の増減により、  更新する関数もあります。 以下のサイトがAccess関数の一覧です。 https://support.microsoft.com/ja-jp/office/%E9%96%A2%E6%95%B0-%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E9%A0%86-b8b136c3-2716-4d39-94a2-658ce330ed83#

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

>エクセルのVBAについて、 ★あなたのやりたいことは関数(Left、Right,Month、Day)を含む数式で解決します。  VBAの出る幕はありません  また日付を月と日に分ける目的は何ですか?  期間なら、=終了日-開始日 で大/小の月、閏年も含んで計算します 以下に課題の式を記述します ---------------------------------------------------------- エクセルファイルAの C3の左から4文字を原紙のN12 =LEFT([A.xlsx]Sheet1!$C$3,4) C3の右から4文字を原紙のP12 =RIGHT([A.xlsx]Sheet1!$C$3,4) D3を原紙のD12 =[A.xlsx]Sheet1!$C$3 E3を原紙のL12 =[A.xlsx]Sheet1!$E$3 F3には日付(例 2023/3/12)となっていて、 月だけを取り出して原紙のB12 =MONTH([A.xlsx]Sheet1!$F$3) 日だけを取り出して原紙のC12 =MONTH([A.xlsx]Sheet1!$F$3)

  • SI299792
  • ベストアンサー率48% (713/1473)
回答No.2

Option Explicit ' Sub Macro1() Const Path = "C:\Users\MA\Desktop\" Dim I As Worksheet Dim RInp As Long Dim Work As Variant ' Set I = ThisWorkbook.ActiveSheet Application.ScreenUpdating = False Workbooks.Open Path & "原紙.xlsx" ' For RInp = 3 To I.Cells(Rows.Count, "C").End(xlUp).Row Work = I.Cells(RInp, "C") [N12] = Left(Work, 4) [P12] = Right(Work, 4) [D12] = I.Cells(RInp, "D") Work = I.Cells(RInp, "E") [B12] = Month(Work) [C12] = Day(Work) ActiveWorkbook.SaveAs Path & Format(Work, "YYYYMMDD") Next RInp ActiveWorkbook.Close False End Sub

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

解答そのものではないが、参考に。 この質問の風に、全体を質問するのでなく、各小課題について (1)課題を切り分ける(抽出する)能力 エクセルで何が出来るか知ってないとならないので    エクセル手作業(含む関数)でもできることをある程度知っていないとならない。 (2)文章や(エクセルの)語句で表現してみる能力 を(早く)身につけること。本件ぐらいなら、皆持っていることで、意識だけのこと。 いわば、質問の内容の、(エクセル的)パターン化だ。 回答者としては、平凡なことを長々読まされるのは・・。 それができれば、WEB照会すれば、エクセルの「中の上レベルまでの課題なら」VBAを含めて、必ず記事が出るから、調べること。 ーー 例えば AセルからBセル  Cells(2,"A")=cells(5,"C") 両者別シートの場合は、付け加えが必要 先頭から(後尾から)4文字だけ Left,Right、Mid関数 日付けデータの「月」数字 Month関数 日付けデータの「日」数字 Day関数 名前を付けて保存(VBA) WEB照会する。 日付毎にエクセルのファイルをわけたいーー>意味不明 ファイル数が、多数になりすぎる? >既に保存されている日付の場合は 既にその(フォルダに)同名のファイルがあるか(VBA)のチェックのコード  ーー>WEB照会する >初めからどのように書いたらいいか教えていただけると幸いです。 丸投げだ。回答者を小間使い的に使うことだ。 一遍にVBAだけでやるのでなく、VBAは出来る範囲で、他は手作業も併存してやることを考えること。 徐々に勉強してVBA処理の範囲を増やしたら。 (A)シート内のセルデータに関すること  WEB照会やエクセルの書籍 (B)ブックの保存(後分)、読みだしに関すること (FSOなど勉強。WEB照会) (C)全体処理構想に関すること ーー>先輩の経験に学ぶ ここが大切で、我流ばかりだと    通用しない時期が来る。 ーー 各月のデータについて、テンプレート的なことを考えているようだが、この点の仕組みや、やり方をどうすべきか、を聞く方が先だろう。

関連するQ&A

  • エクセルVBA ファイル名操作

    エクセルマクロのコードにおきまして 「フォルダの選択」ダイアログから エクセルファイル 123.xlsxを例えば 開くときに それをa.xlsxという名前に変えて 以下のそれに続くVBAコードにおいて a.xlsxを操作したいのですが、 a = Application.GetOpenFilename() Workbooks.Open a これを実行すると求めるダイアログが表示されて 使いたい123.xlsxを開くをクリックしますが これでは123.xlsxがa.xlsxにはなりません このa.xlsxのファイル名で別途ファイル作成する方法を 御教示いただけると助かります よろしくお願いします win10 office365 コードは以下 部分ですが こういう流れで作成したい所存です Sub あいう() a = Application.GetOpenFilename() Workbooks.Open a 'b.xlsxファイルを新規作成 Workbooks.Add ActiveWorkbook.SaveAs Filename:="C:\Users\USER\Desktop\あいう\b.xlsx", FileFormat:=xlXMLSpreadsheet 'a.xlsxファイルの1行目のA1~AG1のセルの値をコピー Workbooks("a.xlsx").Worksheets("Sheet1").Range("A1:AG1").Copy 'b.xlsxファイルのA3~AG3のセルに貼り付け Workbooks("b.xlsx").Worksheets("Sheet1").Range("A3:AG3").PasteSpecial xlPasteValues 以下省略 よろしくお願いします

  • エクセル 保存是非のダイアログを出さずに保存VBA

    エクセル 保存是非のダイアログを出さずに保存VBA エクセルファイルの ひとつのブック L.xlsxの特定のセルを 別のブックR.xlsxのセルにコピーするを VBAコードで コピーまでは出来たのですが R.xlsxのブックを保存するかどうかの ダイアログが出てしまいます これが出ないで保存できるように ActiveWorkBook.Save これを入れてもやはり保存是非の確認が 出てしまいます コードは -------------------- Sub ID移動() Dim x As Workbook Dim y As Workbook Workbooks.Open Filename:="C:\Users\USER\Desktop\ACCESS\L.xlsx" Set x = Workbooks("L.xlsx") Workbooks.Open Filename:="C:\Users\USER\Desktop\ACCESS\R.xlsx" Set y = Workbooks("R.xlsx") y.Sheets("sheet1").Range("A2") = x.Sheets("output").Range("B2") x.Close y.Close ActiveWorkBook.Save End Sub ------------------ 保存是非のダイアログがでないで 保存できるための方法を 御教示いただけますか win10 office365 すみませんが 宜しくお願い致します

  • 下記作業をVBAマクロを作ってボタンに登録したい

    VBA勉強中です。 これまでマクロ登録した内容を弄る しかできませんでした。 下記のマクロの例をどなたかご教示下さいませんか? ご回答を基にしっかり勉強していきたいと思います。 ------------ よろしければ添付画像のフォーマットも併せて参照ください。 ------------ 【行追加ボタン】 ・A列の最終行の一つ下に行を追加する(初回は3行目→A3~E3) ・追加した行のC列の書式を文字列に設定 ・追加した行のC列に"0001"、D列に"9"を入力する ・追加した行のA列をアクティブにする 【前行コピーボタン】 ・A列の最終行の一つ下に直前行をコピーする ・追加した行のA列をアクティブにする 【済ボタン】 ・操作している行のE列に"済"を入力する 【保存ボタン】 ・A~E列の3行目から最終行までをコピーする ・新規ブックを作成し、A3に貼り付け ・新規ブックを[C:\Users\test\Desktop] へ 名前を [yyyymmdd.xlsx](今日の日付)にして保存 ・[yyyymmdd.xlsx]を閉じる 【終了ボタン】 ・A~E列の3行目より下を削除し(上方向)、上書き保存せずにExcelを終了する ------------ ご回答頂ければ幸いです。

  • エクセルVBAでコピー

    エクセルVBAでのコピーについての質問です。 ブック1 とブック2があります。 ブック1 のSheet1 内にマクロ含むワークシートを 新規ブックにファイル名を指定して 下記のようなプログラムでコピーしようとすると (標準モジュール1の内容) Sub newfilesave() MsgBox "デスクトップの「○○」フォルダに控え○○_日付時間.xlsxファイルを生成します。" Sheets("受付仕分リスト").Copy ActiveSheet.Cells.Copy ActiveSheet.Cells.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveSheet.Range("A1").Select 'マクロなしのエクセルデータとして名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 ActiveWorkbook.SaveAs _ Filename:="C:\Users\user\Desktop\○○\○○_" & Format(Now(), "yyyymmdd_hhmm"), _ FileFormat:=xlOpenXMLWorkbook End Sub Sheet1 内にマクロの内容までコピーされてしまいます。 ブック1のレイアウトや書式などはそのままに マクロ部分だけを取り除いてコピーするには どのような流れでプログラムすればいいでしょうか? よろしくお願いします。

  • Excelシート上に貼り付けられたファイルの保存

    Excelシート上(A.xlsx)にさらにExcelファイル(B.xlsx)が貼り付けられています。 A.xlsxのシート上では、ExcelのアイコンとB.xlsxのファイル名が見えている状態です。 アイコンをクリックしてB.xlsxのファイルを開くことはできますが、そこから保存しようとすると、A.xlsxのファイル名で保存されようとします。 アイコンの右クリックでもExcelファイルとしての保存はできなさそうです。 このB.xlsxを、簡単にB.xlsxのファイル名で保存する方法はないでしょうか? もちろん手で画面をみながら再入力すれば可能ですが、入力ミスや手間を省きたいのです。 Excelのバージョンは2010です。

  • Excel vbaファイル指定先に保存されない

    マクロをかけたエクセルファイルを、特定の名前を指定(年月を足す)して 「修正後」フォルダを作り、そこへ保存させたいのですが ファイル名の変数設定に「修正後」を入れてもだめなのでしょうか? ****** Sub NEM_Macroループ() ' ' フォント変更、記号変換、テキストボックス、全シート ' Dim myFile As String Dim myPath As String Dim myBook As Workbook Dim mySheet As Worksheet Dim myRange As Range Application.ScreenUpdating = False 'Cドライブに修正後というフォルダを作成します。 MkDir "C:\Users\XXXXXX\Desktop\NEM_macro\修正後" 'フォントを変更するファイルが保存されているフォルダのパスを指定します。 myPath = "C:\Users\XXXXXX\Desktop\NEM_macro" '指定したフォルダ内の全てのExcelファイルに対してループを実行します。 myFile = Dir(myPath & "\*.xlsx") Do While myFile <> "" '各ファイルを開きます。 Set myBook = Workbooks.Open(myPath & "\" & myFile) '全てのワークシートに対してループを実行します。 For Each mySheet In myBook.Sheets 'シート内の全てのセルに対してループを実行します。 Set myRange = mySheet.UsedRange Cells.Font.Name = "MS Pゴシック" Cells.Font.Name = "Arial" Dim 年月 Dim ThisName, NewName Dim MojiCoA As Integer, MojiCoB As Integer 'Format,Year,Month関数を利用します 年月 = Year(Date) & "_" & Month(Date) '拡張子なしのファイル名を取得します MojiCoA = InStrRev(ActiveWorkbook.Name, ".") ThisName = Left(ActiveWorkbook.Name, MojiCoA - 1) 'ファイル名を変数へ設定します NewName = ActiveWorkbook.Path & 修正後 & "\" & ThisName & 年月 & ".xlsx" '作成したWorkbookを名前を付けて、移動先フォルダに保存します ActiveWorkbook.SaveAs Filename:=NewName '次のファイルに移動します。 Next myFile = Dir() Loop End Sub

  • EXCEL- VBA(CSVファイル→インポート)

    A列~F列になる複数(100個以上)のCSVファイルをエクセルファイルにインポートして更に個別にエクセルファイルとして保存したいのですが VBAでできるのでしょうか? 記憶マクロでやったらどうにもうまくいきません。 エクセルのVBAについては ほとんど知識ゼロなので困っております。 大変厚かましくありますが どなた様かご教授お願いできたらと思います!! 【元のファイルの状態】   ◆ファイル名「*.CSV」*は文字数それぞれ違います。   <例:tanaka.xls だったり 09福島.xls>  ◆入っているドライブ   TEXT;C:\Documents and Settings\AA_B\デスクトップ\練習  ◆A~F列にデータが入っている 【やりたいこと】    (1)A~F列はカンマ区切りで全て文字列としたい  (2)元のファイル名でエクセルとして保存したい「*.XLS」

  • excelからwordのファイル名を検索してリンクを貼りたいのです。

    excelからwordのファイル名を検索してリンクを貼りたいのです。 1つのexcelファイルの中に数千行のデータが入っています。 そこから、excel1行に対して1つずつ、wordのファイル名にリンクを貼りたいのですが、 excelのデータとwordのファイル名で共通しているのは、excelにあるデータ(ABCDE)に対して、wordのファイル名は(CDEFG)と、全部が共通しているのではなく、3つだけ共通の文字列があるだけです。 (※各A,B,C,D,E,F,Gは文字列。A=日付、B=名前 など。)       関数でできるのか、マクロを組まなきゃいけないのか、それすらもわかりません。 こんな説明でわかりますか? マクロはほとんど初心者なので、詳しく教えて頂けると助かります。

  • VBAでログファイルを使って表をつくりたいです。

    Excelのマクロを使って、ログファイル「PPP.0413」というファイルを読み込み、表にして出力したいです。ファイルの中身は、 00201204110255******制御A ***** というようなものが50行あります。 00は無視、20120411が日付、0255が時刻、制御Aがプロセス名、****は無視 日付をセルA列に、時刻をセルB列に、制御AをセルCに出力 これを50行繰り返し行いたいです。 あとOpenで開いたときに化け文字になってしまうので文字変換コード?も指定したいです。 よろしくお願いします。

  • テキストファイルとして開くVBA

    フォルダC:\Users\USER\Desktop\あいう において このダイアログを開いて そのなかのファイル(A.xml)を txtファイルとして開いて その名前を テキスト.txt として 同名で保存したいのですが Dim FileName As Variant Dim NewFile As TextFile FileName = Application.GetOpenFilename() Set NewFile = TextFile.Open(FileName) NewFile.SaveAs "テキスト.txt" Activetxtfile.SaveAs FileName:="C:\Users\PC\Desktop\あいう\テキスト.txt", FileFormat:=TextFile どうも違うようです 御教示ください

専門家に質問してみよう