[表示 : 全て 最新50 1-99 101- 201- 2ch.scのread.cgiへ]
Update time : 01/05 16:07 / Filesize : 78 KB / Number-of Response : 246
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part64



1 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 23:43:54.18 ID:ngrqyTy20.net]
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part63
https://mevius.5ch.net/test/read.cgi/tech/1568630099/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

199 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 09:13:02.87 ID:m/MVfWr2M.net]
office2010から2016へ変えたらマクロの遅さが気になって
セルコピーを別の方法でやれないか考えてる

200 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 10:54:11.14 ID:sgFeqmUl0.net]
マクロが遅いんじゃなくてPCのスペックが貧弱過ぎるんじゃないか

201 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 11:54:58.14 ID:M+v9sXGU0.net]
>>198
そこまでする価値はないですね
自分が知らないだけで、なにか簡単な方法があるのではないかと思って
いたのですが、そもそも需要がない動作なんでしょうね

202 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 12:26:41.63 ID:cYIprE7S0.net]
>>199
変えたのはExcelだけか?
実はOSを10に変えた時にExcelも入れ替えたのではなく?

203 名前:デフォルトの名無しさん mailto:sage [2019/12/22(日) 14:42:00.45 ID:qo1j1gBdx.net]
>>201
そこまでやるならmhtか何かでコード生成してからxls変換してレンダリングする方がいいよねって話になってしまうからな

204 名前:デフォルトの名無しさん mailto:sage [2019/12/27(金) 23:18:51.19 ID:89CBNjra0.net]
んあ

205 名前:デフォルトの名無しさん mailto:sage [2019/12/27(金) 23:55:11.89 ID:kLvnMS830.net]
北海道のグラサンスーパーハゲザーはここにはこないのー?

206 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 10:04:17.04 ID:Ht/sR5FE0.net]
北海道にいるんだろ

207 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 11:09:10.42 ID:iMlStgtR0.net]
あなたのハゲにサクセスしたい



208 名前:デフォルトの名無しさん mailto:sage [2019/12/28(土) 17:00:07.97 ID:SHykekh8a.net]
休みに入って大人しくなったな

209 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 22:49:57.07 ID:/3koq0Lq0.net]
フォルダ名を取得し名前を変える処理をしたいのですが、フォルダ名の頭に0がついているとセルに取り込んだ際、数値扱いされきえてしまいます。何かいい方法ないでしょうか?
ほぼネットから引用したものですが。。

Sub folder()
Dim folderPath As String
folderPath = Sheets(2).[B1]
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim n As Variant
n = fso.GetFolder(folderPath).SubFolders.Count

If (0 < n) Then
Dim I As Long
I = 1
Dim f As Object
For Each f In fso.GetFolder(folderPath).SubFolders
Cells(3 + I,1).Value=Str(f.Name)
I = I + 1
Next f
End If
End Sub

210 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 22:54:36.69 ID:Oh0xulqx0.net]
>>209
・セルの書式を予め文字列にしておく

Cells(3 + I,1).Value = "'" & Str(f.Name)
・セルに取り込まずに処理する

どれか

211 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 23:43:11.75 ID:/3koq0Lq0.net]
>>210
頭に「'」つける案いただきます!
すっかり頭からぬけておりました。
ありがとうございます!

212 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:01:52.13 ID:KGMPhTA00.net]
>>209
頭に'付けるとかセルの表示形式を文字にするとか
それVBAじゃなくてExcelの範疇では

213 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:13:18.61 ID:4cnj/64c0.net]
VBAはそもそもビジュアルベーシックフォーアプリケーション
エクセル(他office製品)のための言語
Excelの範疇も何もないよ

214 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:44:32.37 ID:C9nM6Ix2x.net]
セルにフォルダ名を入れなきゃならない理由が全く分からない

215 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:52:53.68 ID:m04meMbs0.net]
PowerQueryにデータの参照元渡すとか

216 名前:デフォルトの名無しさん [2020/01/02(木) 11:28:52.88 ID:yN8yk3jo0.net]
マクロでCSV書き出ししたデータですが
どうも1行ごとに最後のセルの末尾に勝手に改行コードが入っているようです
これはなんとかならないでしょうか

その改行コードもCRLFで言うところのCRだけのようで、見かけ上全くわかりません

aaa,ddd,ccc

とあったら、cccの末尾に見えないCFが張り付いている感じです
urlエンコードで見ると ccc%0D みたいな感じです
どうしたら綺麗に書き出せますか?

217 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 12:02:15.68 ID:33UW29zWd.net]
>>216
改行コードをなくした場合、行の区切りはどうするの?
完全に思い通りにしたい時はテキストファイルの生成を自力でやるしかない



218 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 12:48:11.80 ID:/IgTqK/90.net]
セル内で改行しても平気か確認した方がいい

219 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 12:53:49.13 ID:KGMPhTA00.net]
>>216
ExcelではLFがセル内改行、CRLFが次の行
CRは意味を持たないので入ってても改行されない
消したければ普通にその文字を消せばいい

220 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 12:58:08.65 ID:KGMPhTA00.net]
あと勝手に入ってるのではなく元々のテキストファイルに入ってるんだろう

221 名前:デフォルトの名無しさん [2020/01/02(木) 15:17:06.96 ID:yN8yk3jo0.net]
216です

>>217
csvの中のデータとして配列に入っています。書き出したcsvは普通に数行のカンマ区切りです。
それをjavascriptで配列へ取り込みしたときに、
二次元配列データの一行の最後のデータの末尾に毎行追加されている感じです。

配列内
aaa,ddd,ccc%0D
aaa,ddd,ccc%0D
aaa,ddd,ccc%0D

csvとしての改行・配列構成は崩れていません。
ちなみに書き出しは
ActiveWorkbook.SaveAs Filename:=csvName, FileFormat:=xlCSV
です。win7時代に作ったマクロをwin10で使っていますが、それもあるんでしょうか…

>>219
EXCELの改行仕様は知りませんでした。ありがとうございます。
末尾に列を1つ増やしたら取りたいデータにはつかなくなったので
(おそらく、増やした列に%0Dが移動したのかとw)、
若干気持ち悪いですが、趣味プログラムなので運用で対応します。


みなさんありがとうございました。

222 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 16:37:15.04 ID:yYKIO5swM.net]
北海道のグラサンスーパーハゲザーはここにはこないのー?

223 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 17:52:03.38 ID:YgEQc8yF0.net]
>>216
Excelのsheetに読み込んでから、CRLF等を""に置換する
ではダメ?

224 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 21:25:07.68 ID:ShHqIFTQ0.net]
一般論として例えば、Ruby のCSV の規格にも、
行区切り文字・列区切り文字・クォート文字などがある

特に設定しないデフォルトでは、それらは、
改行コード・カンマ・ダブルクォーテーションになる

もし、それらが無ければ、CSVの要件を満たさないw
つまり、CSVの規格ではありませんw

225 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 23:23:58.57 ID:1vLrUBFwa.net]
ルビカスが何を言おうと、世の中ではExcelが出力するCSVが標準のCSVだ

226 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 10:32:03.45 ID:R/lajPDg0.net]
CSVは自前でテキストファイル読み込み+自前で区切り扱いが基本。
区切りが何であろうと、データの形式が何であろうと全て自分でコントロール出来るし速度も速い。

227 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 12:29:48.12 ID:V2sewd5k0.net]
同意。てか、Excel標準のCSV読み込み仕様もうちょっとなんとかなりませんかね・・・?

それはさておき>>216>>221(もう見てないかもだけど)
その「CSVファイルを配列に取り込むJavaScript」のコードに問題があるんじゃないかなと。
具体的には\n(%0A)でSplitしてるから\rが残ってるだけだと思うけどな。



228 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 18:33:14.85 ID:LoHkYQxe0.net]
使い続ける以上CSVとの戦いは続くのだ

229 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 18:50:10.73 ID:k7eftYc7x.net]
モダンExcelが一般化してきた今ならクエリでCSVの開き方を指定して読み込むのがいいんじゃないの
CSVをエクセルで直接開くといろいろ勝手なことをしてくれるので

230 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 19:06:41.78 ID:esau8hBed.net]
PowerQueryのコードを書くのはVBA以上にハードルが高いぞ

231 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 19:55:22.39 ID:3Uhjf7eSM.net]
PowerQueryコード書かなきゃいけないの?
GUIでできる範囲だと不十分なの?

232 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 19:58:54.81 ID:k7eftYc7x.net]
そんなにハードル高いか?
テキストファイルの読み込みの処理をスクラッチするより明らかに楽だし処理速度も速いと思うが
例えば4列のCSVをSJIS(Windows-J31)でデコードしてカンマ区切りで読み込んでSheet1のA1セルから書き出すとしたらこんな感じ

Sub ReadCSV()
  With Worksheets("Sheet1")
  With .QueryTables.Add(Connection:="TEXT;ソースファイルのパス", Destination:=.Range("A1"))
    .TextFilePlatform = 932
    .TextFileCommaDelimiter = True
    .RefreshStyle = xlOverwriteCells
    .TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat)
    .Refresh
    .Delete
  End With
  End With
End Sub

233 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 20:07:37.72 ID:k7eftYc7x.net]
PowerQueryだったらもっと簡単だろう
Csv.Documentにソースのパスとメタ情報を渡してテーブルを取得するだけだしGUIでステップ記録できる

234 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 20:56:20.20 ID:LoHkYQxe0.net]
CSV読み込みの話してんのになんで書き込みの回答してんだろうこの子

235 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 21:32:33.80 ID:k7eftYc7x.net]
>>234
>>232のコードについて言ってるなら、読み込んでシートに書き出してるわけで、クエリの使い方としてはオーソドックス処理だぞ
読み込んだ結果をシートに書き出さないならODCにデータモデルとして保存すれば良い

236 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 22:10:30.43 ID:k7eftYc7x.net]
>>235
ODCにデータモデルとして→×
データモデルとして→○

237 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 22:23:49.87 ID:X7hap7HH0.net]
>>230
全然。

基本的にはリボンの機能使った操作が1つずつのステップになっていく。
ステップの1つ1つがマクロみたいなもの。
「詳細クエリー」を見て初めて「コードはこうなってるんだ・・・」
という感じ。

もっとも、M Functionのレファレンスやパラメータあたり説明が
英語でもまだ不親切なので、
使えてない部分が多分にはあるけど。
ただ、VBAのように出来る範囲が広範囲なわけではなく、
取得したデータの成形に特化してる。

スクレイピングについては
Pythonみたいに取得対象のWeb画面で
IDやパスワード入力するとか、
ボタンを押すみたいなことも出来ない模様。



238 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 22:43:05.12 ID:3zmXV6NNx.net]
データの成形に特化と言ってもVBAでスクラッチすると恐ろしく面倒なJoinとかのSQLチックな処理は全て実行できるので、データ処理の面ではVBAより手軽で便利

あとAccessDBやSQL ServerやOBDCはもちろん、ファイルシステムとかExchangeサーバとかSharePointリストとか、およそデータベースとして扱えるデータストアの情報は全て取得できる

フォルダ内のファイルの属性情報を取得する処理のためだけにいちいちFileSystemObjectのインスタンスとかを使ってスクラッチする必要がなくなると考えればめちゃくちゃ便利

239 名前:デフォルトの名無しさん [2020/01/04(土) 15:59:54.32 ID:dDunGyfu0.net]
>>227
みています
ご指摘の通り、\nでspritかけてました!
\nってCR+LFじゃなかったんですね…

この後都合があるのですぐには試せませんが、
その辺確認してみます。
ありがとうございます!

240 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 16:12:12.74 ID:8fEwlZFG0.net]
\nはLFじゃなかったか
windowsの改行は\r\nだったような

241 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 17:52:00.86 ID:ALZ03HNg0.net]
EditBoxでは\r\nでRichEditBoxでは\nだねWindows

242 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 17:56:48.54 ID:+4weKQQc0.net]
CR+LFの定数の vbCrLf か vbNewLine でいいんじゃね

243 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 18:04:55.94 ID:8fEwlZFG0.net]
vbNewLineいいよね

244 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 18:23:56.78 ID:ZrFrOERU0.net]
>>239
やっぱり。
>>240-241の人もいうとおり、OSだけじゃなくAPI関数ごとに改行コードの取扱いが違ったりすることもあるし、
テキストエディタに内蔵されてる正規表現なんかでも「\n」でCRLFに対応させてる例もあったりするから、
その辺はトライ&エラーで覚えていくといいとおもうよ。

245 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 18:40:58.78 ID:HwWXKum00.net]
北海道のグラサンスーパーハゲザーはここにはこないのー?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<78KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef