ここから本文です

エクセルで エクセルシートAにボタンを設置 シート4のA1~M2までのデータを...

rak********さん

2017/7/814:01:58

エクセルで

エクセルシートAにボタンを設置

シート4のA1~M2までのデータをエクセルシートAのセルA5の名前

でLibreOfficeでUnicoge(UTF-8)でCSVファイルを作成する
エクセルシートAのボタンに登録するマクロを教えて下さい。

宜しくお願い致します。

閲覧数:
143
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

kky********さん

2017/7/913:35:15

お使いのエクセルのバージョンは何でしょうか。
2016であれば「UTF-8でCSV保存」が出来ます。
それを使ったマクロです。

もし2016でないなら別のマクロに変更します。

Sub test()
Dim wb1 As Workbook, wb2 As Workbook
Dim sh1 As Worksheet, sh2 As Worksheet
Dim fname As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb1 = ThisWorkbook
fname = wb1.Worksheets("シートA").Range("A5").Value & ".csv"
Set sh1 = wb1.Worksheets("シート4")
Set wb2 = Workbooks.Add
Set sh2 = wb2.Worksheets(1)
With sh1
.Range("A1:M2").Copy Destination:=sh2.Range("A1")
End With
wb2.SaveAs Filename:=wb1.Path & "\" & fname, FileFormat:=xlCSVUTF8, CreateBackup:=False
wb2.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2017/7/9 17:24:31

助かりました!

ベストアンサー以外の回答

1〜1件/1件中

Prometheusさん

2017/7/814:57:30

「VBScript」による回答ですので、無視していただいて結構です(「Windows限定」です)。

このプログラムの特徴は、これから処理したいエクセルファイルを1つだけ開いておいて、プログラムファイルをダブルクリックすると、エクセルファイルの保存されている同じフォルダ内に、結果ファイルを作成します。

ファイル名は、開いているエクセルファイルと同じです(「abc.xlsx」→「abc.csv」)。

以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。

「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず半角です。

まず、これから処理したいエクセルファイルを1つだけ開いておき(他のエクセルファイルを開いていては絶対にダメです)、プログラムファイル(「~.vbs」ファイル)を、ダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。

最後に「Finished!」と表示しますので、「OK」を押して、終了してください。

Option Explicit
Dim ad, bk, c, ex, fn, i, j, sh, so
Set so = CreateObject("Scripting.FileSystemObject")
Set ad = CreateObject("ADODB.Stream")
ad.Type = 2
ad.Charset = "UTF-8"
ad.Open
Set ex = GetObject(, "Excel.Application")
Set bk = ex.Workbooks(1)
Set sh = bk.Worksheets("シート4")
fn = bk.Worksheets("シートA").Range("A5")
For i = 1 to 2
c = ""
For j = 1 to 12
c = c & sh.Cells(i, j).Value & ","
Next
c = c & sh.Cells(i, 13).Value
ad.WriteText c, 1
Next
ad.SaveToFile bk.Path & "\" & fn & ".csv", 2
ad.Close
bk.Close
ex.Quit
Set sh = Nothing
Set bk = Nothing
Set ex = Nothing
Set ad = Nothing
Set so = Nothing
MsgBox("Finished!")

簡単な説明です。

Option Explicit

「厳密に」というようないいですが、気にしないでください。

Set so = CreateObject("Scripting.FileSystemObject")

ファイルやフォルダを扱えるようにしています。

Set ad = CreateObject("ADODB.Stream")

「UTF-8」ファイルを扱えるようにしています。

ad.Type = 2

テキストモード。

ad.Charset = "UTF-8"

文字コードを「UTF-8」にセットしています。

ad.Open

ファイルを開く準備です。

Set ex = GetObject(, "Excel.Application")

開いているエクセルファイルを取得するのに必要です。

Set bk = ex.Workbooks(1)

開いているエクセルファイルを取得しています。

Set sh = bk.Worksheets("シート4")

「シート4」シートを、「sh」にセット。

fn = bk.Worksheets("シートA").Range("A5")

「シートA」のセル「A5」の値を、ファイル名として取得。

For i = 1 to 2

2行処理。

c = ""

書き込み用変数の初期化。

For j = 1 to 12

列「A」~列「N」まで処理。

c = c & sh.Cells(i, j).Value & ","

カンマ区切りで、セルの値を「c」に足し込んでいます。

Next

を、列について繰り返し。

c = c & sh.Cells(i, 13).Value

列「M」の値を、「c」に足し込んでいます。

ad.WriteText c, 1

テキストファイルに書き込んでいます。

Next

を、2行処理。

ad.SaveToFile bk.Path & "\" & fn & ".csv", 2

テキストファイルを、開いているエクセルファイルと同じフォルダ内の同じ名前の「csv」ファイルとして保存しています(「abc.xlsx」→「abc.csv」)。

ad.Close
bk.Close

テキストファイルとエクセルのブックを閉じています。

ex.Quit

エクセルそのものを終了しています。

Set sh = Nothing
Set bk = Nothing
Set ex = Nothing
Set ad = Nothing
Set so = Nothing
MsgBox("Finished!")

あとは、終了処理で、最後に「Finishede!」と表示しています。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる