あなたの映画力を試せる!POPLETA映画検定(無料) >>

いつもお世話になっております。
Excel2013を使用していますので
アドバイスどうぞよろしくお願いします。

"ファイル名"というシートのA列2行目からCSVファイルのファイル名が書いてあります。
日によるのですが、だいたい5~10件程度です。
そしてこのCSVファイルがくせ者でファイルを開くと文字化けを起こしてしまいます。下記のサイトを参考にマクロを作ったのですが、文字化けはしないものの文字に必ず""がついてしまい、また一行しか転記されません。

http://officetanaka.net/excel/vba/file/file10.htm

例 空白→""、 神奈川→"神奈川"

やりたいこととしてはファイル名とあるシートのA列2行目に書いてあるCSVファイルを開き、文字化けを直してSheet1にデータを表示させ、それをファイル名が書いてある最終行まで行いたいです。

Sub macro()
Dim i1 As Long, x As Long
Rbook As Workbook
Rsheet As Worksheet, Ssheet As Worksheet
Set Rbook = ThisWorkbook

Sheets("ファイル名").Select
Set Rsheet = Rbook.Worksheets("ファイル名")
For i1 = 2 To 10
If Rsheet.Cells(i1, 1).Value <> "" Then
Sheets("SHEET1").Select ’表示させるシート
Set Ssheet = Rbook.Worksheets("SHEET1")
Ssheet.Cells.Clear
Ssheet.Range("A1").Select

’文字化けを直す
Dim buf As String, Target As String, i1 As Long
Dim tmp As Variant, j As Long
Target = "¥アドレス" & Ssheet.Cells(i, 1).Value
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile Target
Do Until .EOS
buf = .ReadText(-2)
i = i + 1
tmp = Split(buf, ",")
For j = 0 To UBound(tmp)
Cells(i, j + 1) = tmp(j)
Next j
Loop
.Close
End With

’別のマクロ実行

End if
Next i1

’2行目、3行目と続く

End Sub

どうぞよろしくお願い致します。

質問者からの補足コメント

  • つらい・・・

    fujillin様
    アドバイスありがとうございます。
    色々説明不足で申し訳ございません。
    クォーテーションですが実際のCSVにはついていません。マクロを実行するとついてしまいます。
    >最初と最後の1文字を無条件で削除すれば良いでしょう。
    ちなみにこちらは試して見たのですが上手く機能しませんでした(たぶん私のコードが間違えていると思います)

    また、検証として↓だけで実行してみたところ
    最後の行が貼り付け(?)されておらず
    buf = .ReadText(-2) でデバッグになります。
    そして1行目は正しく貼り付けされているのですが2行目はN列がA列に(N列以降はN,M,O..と順番通り)
    3行目はO列がA列に(O列以降はP,Q,R..と順番通り)
    4行目はN列がA列に(N列以降はN,M,O..と順番通り)
    5行目はO列がA列に(O列以降はP,Q,R..と順番通り)
    .
    .

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/02/14 18:48
  • と、貼り付け場所がズレてしまいます。
    >出力の行を制御している変数iの初期値設定
    これが原因かと思うのですが、どこに入れたら良いか分からず、、、
    出来ればA列の2行目から貼り付けたいです。

    >Target = "¥アドレス" & Ssheet.Cells(i, 1).Value
    が実行される前に~

    すみません。Ssheet.Cells(i, 1).Valueは
    Rsheetの間違いで実際のコードにはRsheetと記載しています。

      補足日時:2019/02/14 18:50
  • <検証用>
    Dim buf As String, Target As String, i1 As Long
    Dim tmp As Variant, j As Long
    Target = "¥アドレス"
    With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .LoadFromFile Target
    Do Until .EOS
    buf = .ReadText(-2)
    i = i + 1
    tmp = Split(buf, ",")
    For j = 0 To UBound(tmp)
    Cells(i, j + 1) = tmp(j)
    Next j
    Loop
    .Close
    End With

      補足日時:2019/02/14 18:50
  • うーん・・・

    アドバイスありがとうございます!
    試してみたところ、一行目は無事に出来たのですが
    そのあと"buf = .ReadText(-2)"で止まり
    "パラメーターが間違っています"と表示されてしまいます。。。
    アドバイスどうぞよろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/02/14 20:11
  • つらい・・・

    何度もありがとうございます!
    参照設定にチェックを入れ、
    Set Strm = Nothingを追加したら
    "buf = .ReadText(-2)"で止まることはないものの
    今度は一行目しか貼り付けされなくなってしまいました。。。
    どうしたら良いのか迷走しています。。。

    No.3の回答に寄せられた補足コメントです。 補足日時:2019/02/15 17:09

A 回答 (3件)

こんにちは。



>そのあと"buf = .ReadText(-2)"で止まり
>"パラメーターが間違っています"と表示されてしまいます。。。
>アドバイスどうぞよろしくお願いします。

ご指摘の部分は、残念ですが、想定外の問題で、ADODBを使って別のやり方はありますが、そのデータ自体の問題であり、原因は分からないままにコードを変えて何度も繰り返す可能性のほうが高いです。別のファイルでも、2番めに同じように起こりますか?

   Next j
  Loop
  .Close
 End With
 Set Strm = Nothing '←は入れたらどうでしょうか。
End Sub '←ここが最後の行

それと、私は、参照設定で、Adodb を入れていること。(Microsoft ActiveX Data Objects 2.8 Library)
Dim Strm As ADODB.Stream

これらは、あまり関係ないけれども、実際に自分がする時はこうします。もちろん、ご質問者さんが選んだ方法を完動するように書き上げただけですから、この延長上に、同様のエラーがなくなるという可能性は低いのではないかと思います。

今、思いついたのは、Excel 関数のClean 関数を間に入れる方法はあるとは思います。
それは、エラーを起こすと予想されるバイナリコードを除去する働きがあります。ただし、エラーがバイナリコードであれば、という条件です。

しかし、こちら側では、根本的な解決策は見当たりません。が、何度もトライするよりも、ダメだったファイルが、どうしてだめだったか、エディターなどで調べていただいたほうが良いですね。そちらのほうが早いのです。
巨大なファイルではない限りは、文字変換で、UTF-8 から、SJISに変換するツールで、一旦変更してから、インポートするほうが楽だと思います。Vector で、Unix系のツールなどいくつかあるようです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

WindFaller様
アドバイスありがとうございました!
文字化けしてないCSVで試してみたところ
全列表示されたので、ファイル自体に問題があるのかもしれません。
もしかしたらまた質問するかもしれませんが
自分でも色々調べみようと思います。
ありがとうございました!

お礼日時:2019/02/15 20:48

こんばんは。



補足は読んでおりませんので、そのままここにアップロードします。

エラー付きのコードを出していただいても、今ひとつはっきりしないので、ご質問の要点をまとめますと、
・CSVは、UTF-8 であること(ただし、BOMあり、BOMなし不明)
・ファイ名というシート名の部分のA2 からA列に対してCSVファイルの一覧があるということ。その数は不定であること。
・Sheet1 に連続してインポートしていくこと。
・その中の「""(コーテーションマーク)」は不要であると。(これは、Replaceを使うのが一般的です)
---------------------------
BOM付きなら、なんとかなるはずですが、このプログケラムには、UTF-8を選別することが出来ないという欠点があるので、UTF-8決まったものとします。このファイルのパスは、この実行しているワークブックと同じ場所にあるということになっていますので、場所が違う場合は適宜変えてくたさい。。

'//標準モジュール
Sub CSVImportCSV()
 Dim Fname As String
 Dim i As Long, j As Long
 Dim myPath As String
 Worksheets("Sheet1").UsedRange.Clear
 myPath = ThisWorkbook.Path & "\"  'パス
 With Worksheets("ファイル名")
  For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
   Fname = myPath & .Cells(i, 1).Value
   If Dir(Fname, vbNormal) <> "" Then 'ファイルの存在のチェック
    Call CSVConverter(Fname)
   Else
    .Cells(i, 2).Value = "missing" 'ファイルがない場合は、B列に表示
   End If
  Next i
 End With
End Sub
Private Sub CSVConverter(ByVal Fname As String)
 Dim Strm As Object
 Dim i As Long, j As Long
 Dim buf As Variant
 Dim sh As Worksheet
 Dim Lastrow As Long
 Set Strm = CreateObject("ADODB.Stream")
 Set sh = Worksheets("Sheet1")  '出力シート
 i = sh.Cells(Rows.Count, 1).End(xlUp).Row '行の最後
 With Strm
  .Charset = "UTF-8" 'Encording
  .Open
  .LoadFromFile Fname
  Do Until .EOS
   buf = .ReadText(-2)
   buf = Replace(buf, """", "")
   arg = Split(buf, ",")
   i = i + 1
   For j = 0 To UBound(arg)
    sh.Cells(i, j + 1) = arg(j)
   Next j
  Loop
  .Close
 End With
End Sub
この回答への補足あり
    • good
    • 0

こんにちは



いろいろ不明点はありますが・・・

>文字化けはしないものの文字に必ず""がついてしまい、
「"」が付け加えられるという意味でしょうか?
ご質問文ではそのように読めるけれど、そんなかとは無いのではないでしょうか。
元のCVSデータが、クォーテーション付きのCSVになっているだけではと推測しますが?

クォーテーションが邪魔であるなら、個別のデータにした時点で、『最初と、最後の1文字が"なら、両方取り除く』という処理を通るようにすれば外せると思います。
必ず、クォーテーション付きと決まっているなら、チェックの必要もなく、最初と最後の1文字を無条件で削除すれば良いでしょう。

>また一行しか転記されません。
転記された一行分は、最初の行でしょうか、最後の行でしょうか?
最初の一行であれば、二行目に移る前に処理が中断(または終了)していると推測できます。
最後の一行なら、全行処理しているけれど上書きしているなどの可能性が・・・


とはいえ、出力の行を制御している変数iの初期値設定がどこにも見当たらないけれど、エクセルマクロのデフォルトに任せてるって言うことでしょうか?
(行の制御では、特に問題にはならないかも知れませんが…)

ついでながら、ご提示のコードをざっと眺めて、わからない部分がいろいろと・・・

>Target = "¥アドレス" & Ssheet.Cells(i, 1).Value
が実行される前に、
>Ssheet.Cells.Clear
でシート内をクリアしちゃってるけれど、Cells(i, 1).Valueで何を取得するつもりなのでしょうか?

さらには、その際の変数iはデフォルトだと空白(又は0)となっていて、セル参照に失敗するはずと思うのですが・・・
と言うものの、ご質問文ではファイルが読めているようなので、さっぱりわからないところです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとう

アドバイスありがとうございました!
色々自分の勉強不足を痛感しました。
今後参考にさせていただきます。

お礼日時:2019/02/15 20:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q4142から653347と飛んでます。 これを4143からちゃんと並ぶにはどうすればいいでしょうか?

4142から653347と飛んでます。
これを4143からちゃんと並ぶにはどうすればいいでしょうか?

Aベストアンサー

これ、9から70に飛んでるよね。

①シート全体を選択
②どの行でもいいので右クリック
③再表示を選択

開いたかな?

QExcelで「令和」と表示されるのは5月1日にならないとだめですか?

「日本の新元号に関する Office の更新プログラム」というページ(下記)で、
「Windows と Office の更新プログラムを適用済みの場合でも、Windows 上で実行されている Office 製品は 2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しませんのでご注意ください。」
と書かれています。
https://support.microsoft.com/ja-jp/help/4478844/office-updates-for-new-japanese-era

今月4月中に、Excelのセルに来月5月以降の年月日を入力した場合に、自動で「令和」という元号を表示させることはできないのでしょうか。

もし、できるということであれば、「2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しません」とはどのような意味なのでしょうか。

Aベストアンサー

>こちらでは、「4月17日以降にOfficeも更新されれば「令和元年」と表示されると思います」と書かれているんですが

その方は、Microsoftの方ではないですし個人の予想ですよね?公式が出ているのにそれを持ち出してどうするんですか?

5/1より前に新しい元号を表示したい場合は数式や表示形式で限定的に表示させる方法を色々な方が考え付いていますよ。
検索すればたくさん出てきます。

Q文字列になっている数値の日付変換はわかるのですが、20190204 → 2019/02/04ではなく

文字列になっている数値の日付変換はわかるのですが、20190204 →
2019/02/04ではなく
20190204→2月4日と一発変換となる関数式や設定などありますか?
よろしくおねがいします。

Aベストアンサー

数式: =(TEXT(A1,"0000!/00!/00"))*1
書式: m"月"d"日"

Q文字化けするCSVファイル読み込みについて

いつもお世話になっております。
前回、文字化けするCSVファイルをVBAで読み込みしたいと思い質問させていただきました。
(https://oshiete.goo.ne.jp/qa/10978574.html)
ご教示いただいたコードでCSVデータの最初の一行は文字化けせずに内容が表示されたのですが
二行目以降が表示がされません。
ちなみに文字化けしていないCSVで試してみたところ、データは全て表示されました。
自分でも原因を探してみたのですが分からず、アドバイスいただけたらと思います。
よろしくお願いします。

・使用os excel2016
・表示させたいcsvデータ
→1行目から最終行までを別ブックの("Sheet1")の2行目から表示させたい。

Private Sub CSVConverter(ByVal Fname As String)
 Dim Strm As Object
 Dim i As Long, j As Long
 Dim buf As Variant
 Dim sh As Worksheet
 Dim Lastrow As Long
 Set Strm = CreateObject("ADODB.Stream")
 Set sh = Worksheets("Sheet1")  '出力シート
 i = sh.Cells(Rows.Count, 1).End(xlUp).Row '行の最後
 With Strm
  .Charset = "UTF-8" 'Encording
  .Open
  .LoadFromFile Fname
  Do Until .EOS
   buf = .ReadText(-2)
   buf = Replace(buf, """", "")
   arg = Split(buf, ",")
   i = i + 1
   For j = 0 To UBound(arg)
    sh.Cells(i, j + 1) = arg(j)
   Next j
  Loop
  .Close
 End With
End Sub

いつもお世話になっております。
前回、文字化けするCSVファイルをVBAで読み込みしたいと思い質問させていただきました。
(https://oshiete.goo.ne.jp/qa/10978574.html)
ご教示いただいたコードでCSVデータの最初の一行は文字化けせずに内容が表示されたのですが
二行目以降が表示がされません。
ちなみに文字化けしていないCSVで試してみたところ、データは全て表示されました。
自分でも原因を探してみたのですが分からず、アドバイスいただけたらと思います。
よろしくお願いします。

・使用os e...続きを読む

Aベストアンサー

>ただ、やはり2行目以降が表示されず
>特にエラー表示されませんでした。。。

VBAのエラーが発生しないなら、それは、データの終了コードが入っているのでは?
別のコードも用意していましたが、原因が特定できなければ、これ以上、こちらでコードをアップしても無駄だと思います。

それと、その出力のアプリは何でしょうか。以前、POSシステムからの出力ということもありました。本当に、CSVのテキストファイルなのでしょうか。見かけはそっくりの、バイナリで出来たデータファイルもあります。Excelでやり方だけは知っていますが、私は、掲示板上では1度も成功したことがありません。なぜかというと、そのファイルは入手出来ないからです。別の区切り信号が入っているからです。ただ、もともとExcelではサポート外でインポートするようには出来ていないのです。

何度も掲示していれば、いつかは解決するかもしれませんが、現状のこちらのやり取りでは解決はしないでしょう。一応メモ帳レベルよりも上級のエディタで開くなり、バイナリエディタで開いてみたらいかがですか?(FavBinEdit-今回使用したもの)

それから、Excelではなく、EmEditor やCSVを建前とするツールで試してみるのもよいと思います。

画像をつけましたが、標準的なUTF-8 のバイナリの内容です。

念の為、不要のバイナリコードを抜くためのコードです。ただ、解決は難しいと思います。

Private Sub DataOut(arBuf As Variant, mSheet As Worksheet, LastRow As Long)
 Dim buf As Variant, arDat As Variant
 Dim i As Long, j As Long, a As Variant
 With mSheet
  For i = 0 To UBound(arBuf)
   buf = arBuf(i)
   buf = Application.Clean(buf)
   arDat = Split(buf, ",")
   For j = 1 To UBound(arDat)
    a = Replace(arDat(j - 1), """", "")
    .Cells(i + LastRow, j).Value = a
   Next
   a = "": buf = ""
  Next
 End With
End Sub

以下は、UTF-8のファイルの中身。この二種類のUTF-8をサポートしますが、先頭のBOMとCRLF(0D0A)以外のバイナリコードは、入れられません。

>ただ、やはり2行目以降が表示されず
>特にエラー表示されませんでした。。。

VBAのエラーが発生しないなら、それは、データの終了コードが入っているのでは?
別のコードも用意していましたが、原因が特定できなければ、これ以上、こちらでコードをアップしても無駄だと思います。

それと、その出力のアプリは何でしょうか。以前、POSシステムからの出力ということもありました。本当に、CSVのテキストファイルなのでしょうか。見かけはそっくりの、バイナリで出来たデータファイルもあります。Excelでやり方...続きを読む

Q万年カレンダーについて。

次のexcelのデータで、おかしなところがありましたら、教えていただけると幸いです。
https://fire.st/9Il0GsR

Aベストアンサー

>確かに35行は、緑になりました。どうしてそうなるのでしょうか?教えていただけると幸いです。
添付の画像を参照ください。
2018年6月の例ですが、C35へ
=COUNTIF(祝日,A35)
と入力しています。結果は、1048470が表示されます。
これは、=COUNTIF($Y:$Y,A35)と同じことです。(祝日の範囲がY列全体の為)
A35は空白なので、Y列の空白の部分がカウントされます。その為、1048470になります。
COUNTIF(祝日,A35)の結果が0でなければ、判定は真なので、色がつく条件式が成立します。
そのため、緑になります。

>すみません。COUNTIF 関数のみで、祝日に色をつけるとするとどうすれば良いのでしょうか?教えていただけると幸いです。
祝日の範囲を、空白を除いて、正確に定義しなおします。
一旦、祝日の名前を削除し、実際に祝日の日付が入力されているセル範囲Y3:Y107を、祝日の範囲にします。
(つまり、Y列全体をやめて、$Y$3:$Y$107にします)
そうすると、COUNTIF 関数のみで祝日に色をつけることができます。
祝日の名前を削除する方法は、下記を参照ください。(削除せず、変更することも可能です)
https://www.wanichan.com/pc/excel/2016/8/47.html

COUNTIF 関数のみで、祝日に色をつけるようにした場合は、祝日の追加が発生すると(2023年以降分の祝日の追加など)、Y列の範囲が変わるので毎回、それにあわせて、祝日の範囲もかえる必要があります。

>確かに35行は、緑になりました。どうしてそうなるのでしょうか?教えていただけると幸いです。
添付の画像を参照ください。
2018年6月の例ですが、C35へ
=COUNTIF(祝日,A35)
と入力しています。結果は、1048470が表示されます。
これは、=COUNTIF($Y:$Y,A35)と同じことです。(祝日の範囲がY列全体の為)
A35は空白なので、Y列の空白の部分がカウントされます。その為、1048470になります。
COUNTIF(祝日,A35)の結果が0でなければ、判定は真なので、色がつく条件式が成立します。
そのため、緑になります。...続きを読む

QBAHTTEXT関数?!

BAHTTEXT関数なるものがあることを、たった今、初めて知りました。
ヘルプに依れば「数値をタイ語の文字列に変換し、バーツを表す接尾文字列を付加します」とのこと、ビックリポン。
参考までに、他の言語の文字列に変換する関数を教えてください。
まさかタイ語だけ(だとすれば、不公平極まりない!)ではないはず、と思って質問しています。

Aベストアンサー

https://kokodane.com/kansu_mojiretu_02.htm

Qエクセル リストと完全一致するセルに色をつける

シート1のA列とB列に
aaa ccc
bbb ggg
ccc kkk
ddd ooo
と言うリストがあって、A1〜A4はAチーム、B1〜B4まではBチームと名前を付けています
シート2にAチームのリスト4個が続いているものがあればセルを赤、Bチームのリスト4個が続いているものがあればセルを黄色に塗りたいです
AチームとBチームの中には同じ品番がある時もあります
条件付き書式で設定は出来るでしょうか?

Aベストアンサー

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル

 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4

 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5

 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

の4パターンについてそれぞれ調べれば良いだけ。

自分なら
 aaa-bbb-ccc-ddd
のようにシート1から文字列を作り、それが調べるセルで同じパターンになるかを調べます。
シート1はA5セルから、シート2はA11セルからデータが入力されているなら、

 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A11 & A12 & A13 & A14
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A12 & A13 & A14 & A15
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A13 & A14 & A15 & A16
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A14 & A15 & A16 & A17

という条件になる。
この4つのうちの一つでも条件を満たせばセルに赤色を付ければいい。
「Bチーム」についても同様にすればいいので、
この場合、8つの条件式を設定することになります。

面倒でもこの考え方ができていないと、ちょっと条件が変わっただけで対処できずに終わります。
冒頭で「並び順」について書きましたが、並び順がシート1のリストの通りでなくとも色を付けたい場合でも、この考え方は必要ということです。

・・・
ちなみに厄介なのが、どちらのチームにも「ccc」がいるというところかな。
これが無ければ違う方法でシンプルにできるんですけどねえ。

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付け...続きを読む

Q保存先フォルダとファイル名について

いつもお世話になっております。
保存をかける際にダイアログボックスを出したく、
またシートA1には保存先、B1にはファイル名を指定しておきたいのですが
どのようにすればよろしいでしょうか?
色々調べたのですが解決できず、アドレスどうぞよろしくお願いします。

ちなみにEXCEL2013を使用しています。

Sub CsvExportWithQuotation()
 Dim FileName As Variant
 Dim Rng As Range
 Dim LastCell As Range
 Dim c As Range
 Dim i As Long
 Dim strLine As String, fname As String, fpath As String

fpath = cells(1,1).value
fname = cells(1,2).value
 FileName = Application.GetSaveAsFilename( fpath & "¥" & fname,fileFilter:="CSVt Files (*.csv), *.csv")

保存先は指定出来るのですが、ファイル名が表示されません。
何卒よろしくお願い致します。

いつもお世話になっております。
保存をかける際にダイアログボックスを出したく、
またシートA1には保存先、B1にはファイル名を指定しておきたいのですが
どのようにすればよろしいでしょうか?
色々調べたのですが解決できず、アドレスどうぞよろしくお願いします。

ちなみにEXCEL2013を使用しています。

Sub CsvExportWithQuotation()
 Dim FileName As Variant
 Dim Rng As Range
 Dim LastCell As Range
 Dim c As Range
 Dim i As Long
 Dim strLine As String, fname As String, fp...続きを読む

Aベストアンサー

No1です。

>セルではなく直接書いてみたのですが
>ファイル名はFALSE.csv と表示がされました。
ご提示の通りの式を与えれば、そうなります。

第一引数をファイル名と解釈して評価しようとしますので、
> InitialFilename = "保存先&ファイル名"
 1)まず式をそのまま評価すると False(論理値)となり
 2)要求されているのは文字列なので、変換した"FALSE"を値として採用
 3)拡張子「.csv」が付け加えられて
 4)ダイアログのファイル名欄に「FALSE.csv」と表示
という処理がなされているものと思います。

>セルに関数も入っていないのに謎です
セルの値を参照していないのであれば、セルの状態がどうであるかは関係ないはずです。
(関係したら、その方がおかしい)

Qマクロ無しで時間自動で記入をしていきたい

すごく贅沢な話なのですが・・・
マクロを使わず、通常のエクセルで時間を手入力でなく何かしらしたら(例:「1」と入力)自動で別セルに現在時刻ほ記載してくれる

マクロだと下記のような内容でやってます(一部)
Range("H3:K33").Select
Selection.Copy
Sheets("結果").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

マクロを使わずやれる方法はないでしょうか・・・

Aベストアンサー

論より 証拠、

作ってみました。


式、
=TEXT(IF(ISBLANK(B1),IF(ISBLANK(A10),B10,TODAY()),"此処が 変わります。"),"rr/mm/dd hh:mm")

ファイル、
https://1drv.ms/x/s!AjviygfJDgV_3GnS4Ko-q3mWU9fP

尚、
ファイルは 1度、
ローカルに 別名保存して、
其の保存ファイルを 扱うように、
してくださいね、

別名保存でないと、
意味が 無いですよ。


さすれば、
閲覧も、編集も、
叶うものと 思いますよ。

Q此れ、例によって、MSのミスですか?

添付図上段は、Excel 2013 のヘルプ[CELL 関数]からの抜粋です。
見づらければ、次の URL を参照してください。
http://support.office.com/ja-jp/article/cell-%E9%96%A2%E6%95%B0-51bd39a5-f338-4dbe-a33f-955d67c2b2cf

添付図下段は私が検証した結果を示しています。
標準書式のA列の全セルには 2018/5/3 を入力しています。
A列の各セルに対して同行のB列に示す書式(format)を設定すると、A列は添付図に示す表示になります。
式 =CELL("format",A2) を入力して、此れを下方にズズーッとオートフィルした結果(戻り値)をC列に示しています。

赤地に白抜きした部分がヘルプと齟齬していますよね。
特に戻り値 D5 は何処にも登場しません。(どのようにすれば D5 が得られるのだろう?)

此れらの食い違いは、一体全体どういうことなのか教えてください。

Aベストアンサー

こんばんは。
>「ローカルバージョン」とは日本語で書けば“日本語版”という僅か4文字で済むことでしょ?
>>日本独特とは言わないまでも、アメリカのものとは違うということです。
と書きましたとおり、昔ならともかく、本当に「日本語」版というのが存在するならばです。

いずれにしても、ローカル・バージョンは、オリジナル・バージョンに対する意味です。私たちの使っているものが、厳密に日本語版とは言えないからなのです。それは、内部的に、特に韓国語バージョンは共有する部分が多いので、メニュー表示だけの違いだったという記憶があります。東アジアバージョンは、そう変わらないのではないでしょうか。

それに反して、「フランス語」や「ドイツ語」バージョンしか知りませんが、ヨーロッパの言語に関しては、その国の言語のバージョンは、私たちが使っているものとは大きく違うのではないかと思うのです。関数名自体が違います。そして、このアジア向けでは、Microsoft Office で、一度、問題が発生したことがあるのです。アジア向け(日本だけではない)に、一部の機能を抜いた製品を出荷したことがあるのです。そうしたら、ユーザー側で大変なクレームがついたのです。

>ご承知とは思いますが、私がたまに利用する
>http://answers.microsoft.com/ja-jp
>に投稿しても「そんなことは、Microsoft に問い合わせたら」と言われたことがあります。

これが、英語版でも同じような対応なのです。そもそも、回答者に肩書などいらないと思うのです。それで、最近は、Stack OverFlow サイトを読むことが多いのですが、ここでも解決はしませんね。今は、エクセル・ユーザーでも、一部はかなり上のステージに移ってしまいました。
今度、Excel 2019 では、Python が加わるとも聞きますが、どこまでやれるか分かりません。

問い合わせ先なのですが、間違っていたら申し訳ないのですが、ここのHelp画面の下にメールの送信マークがあります。ヘルプからだと、そこしか思いつきませんでした。

https://support.office.com/ja-jp/article/cell-%E9%96%A2%E6%95%B0-51bd39a5-f338-4dbe-a33f-955d67c2b2cf

No.3さんの
>セルに独自の表示形式が設定されている場合は、セルの表示形式を表すコードが返されます。
#2のマクロ関数の GET.CELL(7, セル)だったら出せるけれども、CELL関数では無理なのではないでしょうか。

こんばんは。
>「ローカルバージョン」とは日本語で書けば“日本語版”という僅か4文字で済むことでしょ?
>>日本独特とは言わないまでも、アメリカのものとは違うということです。
と書きましたとおり、昔ならともかく、本当に「日本語」版というのが存在するならばです。

いずれにしても、ローカル・バージョンは、オリジナル・バージョンに対する意味です。私たちの使っているものが、厳密に日本語版とは言えないからなのです。それは、内部的に、特に韓国語バージョンは共有する部分が多いので、メニュー表示...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング