Excel VBA 質問スレ Part59

■ このスレッドは過去ログ倉庫に格納されています
2019/02/09(土) 15:12:30.70ID:3lTArmdf0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part58
https://mevius.5ch.net/test/read.cgi/tech/1542577644/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
618デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/03/04(月) 11:45:46.92ID:gwy/L6iPH
>>617
2019/03/04(月) 14:30:16.31ID:TvaJY4yu0
関数とVBAと対比させてるのに勘違いする奴がいるとはとても思えないが。
いたらそいつはアホだよ。
2019/03/04(月) 14:32:37.46ID:TFGUk6BN0
>>619
馬鹿が恥の上塗りに来ましたよ、と
2019/03/04(月) 14:57:43.98ID:TvaJY4yu0
>>620
あらら、アホが恥の上塗りに来たよw
2019/03/04(月) 15:02:35.15ID:vFn2j9Kt0
vbaだし何でもええやろ
どうせ大事に至ることはない、争う程の事ではない
2019/03/04(月) 15:28:20.01ID:TFGUk6BN0
>>621
馬鹿はVBAに関数がないと思っているのか?
馬鹿は早く死ねよ
2019/03/04(月) 16:20:08.03ID:RuY9YBtCM
「文脈上USBメモリのことであるとわかるときはUSBでいい」

「そもそもそんな呼び方普段からするなよ」
2019/03/04(月) 18:20:48.65ID:FDpjfwBmM
わかるかどうか判断するのは読み手側だからな
書く側が勝手に略すのは読ませる気がないんだろう
2019/03/04(月) 23:23:23.24ID:dF1M3atd0
そういえばCD-ROM2をロムって呼んでたやついたな

これSUPER CD-ROM2だから
2019/03/05(火) 00:24:00.61ID:YDI1bFmR0
ID:TvaJY4yu0みたいな馬鹿がメンテできなくなるVBAを作る
2019/03/05(火) 00:37:29.46ID:yUBkGE+g0
jsのAPI使える人いる?
使い方がサッパリ分からない

https://docs.microsoft.com/ja-jp/office/dev/add-ins/excel/excel-add-ins-advanced-concepts
https://docs.microsoft.com/ja-jp/office/dev/add-ins/reference/overview/excel-add-ins-reference-overview
629デフォルトの名無しさん (アウアウエー Sadf-vuRV)
垢版 |
2019/03/05(火) 03:34:27.88ID:VDry4yCPa
馬鹿には無理
2019/03/05(火) 05:56:45.90ID:pou1Iepn0
>>628
見てきたけど、なんかすげえめんどくさそう。出来ることも見新しいことってほとんどないじゃん
普通のWin32APIとかやったことあるのか。そっち勉強した方が遥かにまし。 VBAでもやれるから
2019/03/05(火) 07:48:42.24ID:VSxyPtP8a
いやMacとかOffice Onlineで使えることに意味があるんだろ
まあOffice Online使うくらいならGSuite使うという企業が殆どだろうけどw
2019/03/05(火) 08:12:27.21ID:yUBkGE+g0
>>628
はこういう事だった
誰も使ってないのね
https://qiita.com/y__na_ka_ya_ma/items/2575e79248978ff7828d

>>629
自己紹介乙

>>630-631
もちろんやれることは同じ
jsで書ける事自体がメリット
googleSpreadsheetのマクロを移植する時に使える
一生に一回もないと思うけどな
2019/03/05(火) 08:56:53.06ID:K5flI6jox
Win32APIとOffice JavaScriptAPIどっちを勧めるかと聞かれたら今なら後者かな
後者の案件あるのか知らんが
2019/03/05(火) 12:20:11.68ID:IGhfqt8ja
そもそも全くの別物を比較してどうすんねん
2019/03/05(火) 12:44:55.98ID:bZMGULjeF
>>623
日本語が理解出来ないようだな。
VBAと関数を対比させているんだからここで関数と言ってるのは"VBAの関数"のことでは無いと解釈するのがまともな日本人だ。


>>624
???
それは日本語として変だ。
USBメモリはUSBでは無い。
VBAの関数は関数ではある。
そもそもの例が適当でないわけだ。

>>625
文脈や、やり取りでVBAの関数なのかワークシート関数なのかを判断する必要があるのは>>66>>142>>172も一緒だ。
お前らと違って普通の日本人は文脈ややり取りから判断出来てるんだよ。
>>614のようなことを言い出すのはお前らのような頓珍漢な奴らだけだよ。
2019/03/05(火) 12:47:21.71ID:bZMGULjeF
>>142>>186>>448
も文脈で判断するな。
2019/03/05(火) 12:51:32.81ID:bZMGULjeF
>>634
正にその通り。
Win32APIではじめて出来ることがjsで出来るなら分かるけどね。
2019/03/05(火) 13:01:00.32ID:yUBkGE+g0
>>634
あぁやっぱりそうだよね
知識不足かと思って調べてしまったわ
2019/03/05(火) 13:14:26.63ID:YDI1bFmR0
ID:bZMGULjeF

マジモンのアスペルガーのキチガイ
2019/03/05(火) 13:18:51.34ID:yUBkGE+g0
jsアドインもう少しぐらい使われてるのかと思ったけど、
誰も使ってないようで安心した
641デフォルトの名無しさん (ワッチョイ 377c-nl/e)
垢版 |
2019/03/05(火) 13:32:20.37ID:YOwkwz810
Excel Python API とかも Excel.js Office.js とかと同じ扱いになる悪寒
2019/03/05(火) 13:36:30.59ID:yUBkGE+g0
>>641
ゲェッ
vbaはこの手軽さが最強の武器なのに、VSからアドイン作成とかあまりに残念すぎる
2019/03/05(火) 20:23:23.29ID:ruLmgCaM0
>>639
これだからアホは困る。
お前、出版社にはクレーム入れるなよw

https://www.amazon.co.jp/gp/aw/s/ref=nb_sb_noss?k=Excel+関数
2019/03/05(火) 20:34:12.08ID:ruLmgCaM0
URLエンコードしてなかったな。

https://www.amazon.co.jp/gp/aw/s/ref=nb_sb_noss?k=Excel+%e9%96%a2%e6%95%b0
2019/03/05(火) 20:39:11.81ID:yUBkGE+g0
逆引き系辞典はネットあると本当に使わない
2019/03/05(火) 21:11:49.71ID:WmyrgrGT0
会社で異動になった人が作ったマクロの稀に出るバグを直そうと頑張っています。
ちょっと怪しいかなと思ったプロシージャがあるので見にくく長いと思うのですが見て頂けませんか?
勉強しながらの初心者です。

Sub wait(IE As InternetExplorer)
Const リトライ = 2
Dim IEDOC As HTMLDocument
Dim ReCount As Long,i As Long

Do
«略»
Set IEDOC = IE.Document
«略»
Loop While IEDOC Is Nothing

If IEDOC.frames.Length < リトライ Then
ReCount = リトライ
Else
ReCount = IEDOC.frames.Length
End If

For i = 0 To ReCount
Do While IE.Busy Or IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Next
End Sub
このあとすぐに書き込みに参ります
2019/03/05(火) 21:26:50.63ID:WmyrgrGT0
オレンジの部分がIE.Busy = Trueという風に教科書通りになっていないのですがこれで大丈夫なのでしょうか
上手いことちゃんとなっているか調べようとやってみましたが私には難しかったです

そして水色の部分なのですが、フレーム数を取得してその数だけ念の為回しておくという感じでしょうか
フレームがいくつかあると取得のたびにIE.BusyがTrue,Falseに切り替わると聞いたのでそのためで合っていますか
それよりもさっき調べて出てきた

'完全にドキュメントが読み込まれるまで待機する
Do Until IE.document.ReadyState = "complete"
DoEvents
Loop
ではダメなのでしょうか、別物でしょうか

ざっとみておかしい部分はありますか?
図々しくすみません

https://i.imgur.com/DQxGNB5.jpg
2019/03/05(火) 21:32:38.87ID:WmyrgrGT0
どういうマクロかと言うと、IEを開いてリンクボタンをいくつか押して文字を引っ張ってきてIEを閉じるというのを何度か繰り返すものです。
リンク先を正しく閉じられていないまま次の回転に入っていることが稀にあるのです
2019/03/05(火) 21:58:09.97ID:yUBkGE+g0
>>646
別物だな

>>646はvbaオブジェクトのプロパティ
WebBrowserControl.ReadyState
https://docs.microsoft.com/ja-jp/office/vba/api/access.webbrowsercontrol.readystate

>>647はwebのapi
Document.readyState
https://developer.mozilla.org/ja/docs/Web/API/Document/readyState

どっちが信用できるかは分からない
どちらにしてもIEオブジェクトがどこまでwebの技術に対応してるか分からない。難しい

かなり雑な解決策としては、
>リンク先を正しく閉じられていないまま次の回転に入っている
とりあえず必ず開いていると仮定して、最初に閉じる処理を噛ませばいいだけな気もする

あと個人的にだけど、untilはあんまり好きじゃない。「否定の否定」が出て来ないように注意した方が良い。あれは読みづらくなる
とりあえず応急処置として、併用してみてはどうかな。うまくいくかどうかはわからない

Do While IE.Busy Or _
IE.readyState <> READYSTATE_COMPLETE Or _
IE.document.readyState <> "complete"
DoEvents
Loop
2019/03/05(火) 23:41:58.62ID:b71Efr460
IE11からreadystateもbusyも使えなくなったとかどこかで見た
利用出来ないという意味ではなくて使い物にならないという意味で

なので移動後に表示されるタブ見つけたら、とか移動後に表示される文字列を見つけたらという条件で対処してるわ
2019/03/05(火) 23:46:48.59ID:yUBkGE+g0
ここでもIEかよ・・・
2019/03/05(火) 23:57:28.83ID:AE45wcOz0
逮捕されないように気をつけろ
2019/03/06(水) 00:08:19.97ID:qZfNBEKA0
>>646
・ IE.Busy = Trueという風に教科書通りになっていない
「if A then B」自体が既に「AがTrueならB」っていう意味だから、更に「= True」は冗長

・ フレーム数を取得してその数だけ念の為回しておくという感じでしょうか
作者はそのつもりだったんだろうけど、Whileの条件が真になった瞬間に全ループが終わるだろうから無意味
その後何かがFalseになってもEnd Subになる

・完全にドキュメントが読み込まれるまで待機する
偶にIEの受信が終わってもDocumentが読み込み終わってない時があるから、付けたほうがいい
フレームの件も、フレーム毎にdocument.ReadyStateを待つことで解決できる(ことが多い)

>>649
VBAは短絡評価出来ないから、IE.documentが取得できないとreadyStateプロパティが見れずに参照エラーが起きるよ
先にIEを待ってから、安全策としてdocument.readyStateも確認すると安定してDOMが使える
2019/03/06(水) 00:12:35.24ID:M8vFX/4l0
csvを読み込む手法はいくつかありますが以下のような場合どの方法が最適でしょうか
1行1レコードになっていない(セル内改行あり)
csvが複数ありそれをすべて読み込んで集計処理がしたい
普段はデータインポートやopenで1行づつ読み込んでいましたが1行≠1レコードだと難しいのかと考えています
2019/03/06(水) 00:17:18.56ID:0oqXehnm0
>>649
長文でわかりにくい環境にも関わらず教えて下さってありがとうございます
参考にして、これから開きたいリンク先のウィンドウタイトルと同じタイトルを持ったウィンドウがすでにあれば閉じるという風に書いてみます
下の方に書いてくれたコードも試してみます
本当にありがとうございました
また下らない質問者したらすみません

>>650
会社のパソコンが古いのでしばらくは大丈夫そうです
ですが重要なことなので覚えておきますありがとうございます
2019/03/06(水) 00:29:35.50ID:qZfNBEKA0
>>655
既存のウインドウを触るのは初心者にとっては結構大事だよ
閉じれてないのはQuitメソッドの前に次の処理が入ってしまってるだけだと思うから、
処理が終わったと思われる場所に自分でコードを挿入したらどうだろう
2019/03/06(水) 00:33:49.27ID:qZfNBEKA0
>>654
改行が含まれてるセルは""で括られてるという認識でいいなら、
丸ごと文字列として読み込んだ後に正規表現で""内の改行を全部改行コードに書き換えるのが良いと思う
2019/03/06(水) 00:36:57.21ID:qZfNBEKA0
>>657訂正
改行を全部改行コードに書き換える

改行コードを全部書き換える
2019/03/06(水) 00:54:59.22ID:jXlQSKwgr
>>657
試してないので想像ですが1ファイル数mb程あるので一括読み込みで取得出来るんでしょうか…?
変数に入るのか、pc動作的にどうなのかが気になりますが…一度試してみます
2019/03/06(水) 01:00:18.09ID:wqRC+Uom0
>>654
replace(str,vbcrlf,"うんこ")
2019/03/06(水) 01:08:03.42ID:qZfNBEKA0
>>659
文字列型に格納すればいいと思います
確か数Gbぐらい格納できたはず
662デフォルトの名無しさん (JP 0H4f-j5yB)
垢版 |
2019/03/06(水) 07:35:28.45ID:3ub5rlP9H
IEってBusy以外にステータスも見てないとループ抜けちゃわなかったっけ
2019/03/06(水) 07:51:07.24ID:9ZQV49QQM
抜けた気がする
要素がありませんってよく怒られた
2019/03/06(水) 08:14:30.41ID:OZZFIuGOd
両方見てても抜ける時が有る。
滅多に無いけど。

例えばClickで遷移する場合に、抜けてからBusyになることがあった。
Submitに比べてClickは単純に文字通りClickするだけなので遷移しないページも有るから必ずBusyになると想定されていないと想像してる。
それ以降Clickの時は最初にSleepを入れるようにしてる。
2019/03/06(水) 08:20:35.12ID:OZZFIuGOd
>>654
別に方法は色々あると思うけど1行ずつ読み込んでも良いんじゃない?
1行ずつでも条件に合うまで1レコードとしなければ良い。
1レコードの最後にも改行は有るんだろ。

もし1行ずつ読むなら1レコード内に複数改行が有る可能性を考慮すること。
2019/03/06(水) 08:57:22.69ID:Uli2bEJM0
>>654
Ruby では、列をダブルクオートで囲むと、その中にカンマや改行を含める事もできる。
他の仕様も含め、詳しくはRFC4180を参照

require 'csv'

p CSV.parse_line( "a,\"あ\nい\"" )
# => ["a", "あ\nい"]

\n は改行

列区切りはカンマで、外側の"〜" は文字列を表すための囲み。
内側の\"〜\" は、"〜"内での"〜"を表すため、\ でエスケープしている。列囲みを表す

a の部分は、\"〜\"で囲まなくてもよい
2019/03/06(水) 09:17:24.17ID:R/1sU7PR0
rubyって・・・
もう完全に終わってる言語なんだからそんなもの勧めないでよ
2019/03/06(水) 09:47:16.43ID:HGc0sPl8M
Twitterで紹介されてたこれ一度試してみたけど機能してたよ

https://www.excelspeedup.com/readcsv/
2019/03/06(水) 11:28:25.04ID:p4qnJjw30
下記リンク先のページ下部にあるユーザ定義関数がVBAとして正しく書けてるかチェックして貰えませんか
https://peltiertech.com/loess-smoothing-in-excel/
2019/03/06(水) 11:39:12.31ID:R/1sU7PR0
>>669
どういう計算をしてるかは知らんけど、コード上は問題ない
2019/03/06(水) 15:05:39.78ID:p4qnJjw30
多分スレチだろうと思いますが、>>669をLibreoffice最新版に実装したところ戻り値に=LOESS(x,y,z,n)で指定したyの配列がそのまま表示されたのでコードどこか間違ってるか仕様変更したのを俺が見落としてるのかなと思って聞きました
ありがとうございました
2019/03/06(水) 15:12:15.84ID:n2VNtnMC0
>>666
市ね
673デフォルトの名無しさん (ワッチョイ 9701-SKB1)
垢版 |
2019/03/06(水) 21:16:11.63ID:qNVr+Lwh0
指定した列以外の列を削除する方法を模索しています。
たとえば、ABCDE列の1行目にそれぞれ

あ い う え お

と入っていて、
"あ"と"う"と"お"以外の列を削除し、

あ う お

というよにしたく、
このようなプログラミングをしたのですが意図するように動作しません。
ド素人と罵られること承知で質問に参りました。
論理式自体考え方がおかしいものとも思っています。
どなたかお力添えいただけないでしょうか?

Sub 不要列削除()
Dim i As Long
For i = 1 To 50
If Cells(1, i).Value <> "あ" Or Cells(1, i).Value <> "う" Or Cells(1, i).Value <> "お" Then
Columns(i).Delete
End If
Next
End Sub
2019/03/06(水) 21:30:16.04ID:o9MkSJEKa
>>673
ifの条件がおかしい
2019/03/06(水) 21:31:48.30ID:LIhekGiK0
表示形式が混在したセルを見た目通りのまま表示形式が文字列の別のセルにコピーするいい方法ありませんか
例えばA1〜A3を、この見た目のまま表示形式が文字列のB1〜B3にコピーしたい場合
  A
1 $1,000
2 2019/1/1
3 9:30

@
 Dim buf() As Variant
 buf = Range("A1:A3").Value
 Range("B1:B3").Formula = buf '←そのまま入れてみる
B1〜B3は 3/6/2019、0.836111111、\10,000.00 になる

A
 Dim buf() As Variant
 Dim buf2(1 to 3, 1 to 1) As String
 buf = Range("A1:A3").Value
 For i = 1 to 3
  buf2(i, 1) = buf(i, 1) '←文字列型にして入れてみる
 Next
 Range("B1:B3").Formula = buf2
B1〜B3は 2019/03/06、0.836111111111111、10000 になる

@Aどちらも書式が勝手に変わります
ちなみにセル範囲を配列に直接つっこまず、文字列型の配列に1セルずつ buf = Range(i, j).Text みたいな感じで入れてからセルに貼り付けると希望の結果になりますがめちゃくちゃ時間がかかります(大量データに使いたいので)
他にやり方があれば教えてください
2019/03/06(水) 21:34:55.08ID:LIhekGiK0
例のA列は↓の間違いです、すいません
1 2019/3/6
2 20:04
3 \10,000
2019/03/06(水) 21:37:03.61ID:o9MkSJEKa
画面表示を止めても遅い?
2019/03/06(水) 21:54:06.80ID:ZuXoITq7x
>>673
列インデックスで加算ループをしている途中で列削除をしてるから、削除した回数分だけ参照参照列の位置がおかしくなるのでは
例えば2列目を削除した後にループ処理の最初の処理に戻ると、次にi=3として.Cells(1,3)とセルアクセスしたときに見ることになるのは本来D1に位置していたセルになる
列削除した分インデックスがずれるので


こうやって減算ループにするのが正解の一つかと

Sub 不要列削除()
Dim i As Long
For i = 5 To 1 Step -1
If Cells(1, i).Value <> "あ" Or Cells(1, i).Value <> "う" Or Cells(1, i).Value <> "お" Then
Columns(i).Delete
End If
Next
End Sub

あるいは、列削除した場合にはEnd Ifの手前でiから1を引いてインデックス調整するようにしたりか
2019/03/06(水) 21:56:07.90ID:ZuXoITq7x
>>673
改めて見たらIfの条件もおかしいね
And条件にしないと
2019/03/06(水) 22:13:28.72ID:0dxLNo3Q0
馬鹿過ぎるのが問題
2019/03/06(水) 22:23:00.33ID:R/1sU7PR0
>>675
textプロパティ

Sub foo()
Range("c1").Value = Range("a1").Text
End Sub

範囲で代入は出来なかったので、適当にforeachで回してくれ
Range("c1:d2").Value = Range("a1:b2").Text
2019/03/06(水) 22:36:44.70ID:LIhekGiK0
>>677
止めた状態で遅いです

>>681
セルに直接入力していくと更に遅くなると思います
2019/03/06(水) 22:56:49.85ID:xGO4PHc60
CSVで書き出せばTEXTが得られるぞ
2019/03/06(水) 23:08:59.57ID:R/1sU7PR0
>>682
あぁtext使ったって書いてたね、ゴメン
配列でも無理なら高速化はどうだろうか
https://15g.jp/post-314/

高速化でも配列でも重いなら、
もうアクセス辺りに移行した方がいいかも
2019/03/06(水) 23:09:20.80ID:R/1sU7PR0
>>683
csvは勝手に変換されるのが鬼門すぎる
2019/03/06(水) 23:48:56.32ID:LIhekGiK0
やっぱりTextプロパティ使う以外無理そうですかね…
2019/03/07(木) 00:01:59.48ID:UepKFInK0
後は>>683かな
住所の"1-1-1"みたいなものがなければ行けると思う。
後はダメ元でgoogleスプレッドシートに移植してマクロ組んで見るとか
2019/03/07(木) 00:20:00.91ID:UmWyYgm40
>>686
textの取得だけループでまわして、
二次元配列に直して代入するとかは?
2019/03/07(木) 00:26:34.58ID:bl5ieqXF0
>>688
遅いって書いてあるだろ。もっと上をお望みなんだよ
2019/03/07(木) 00:44:39.67ID:UmWyYgm40
>>689
直接入力が遅いって言ってるから、入力だけ一括でやれば?と思ったんだが
2019/03/07(木) 00:46:43.69ID:zt2fCEgu0
>>687
他のファイルは使えない状況なんです…

>>688
その処理がすごく時間がかかるので他の手段を探していました

諦めます
今回の事でRangeのValueやFormulaみたいにTextも配列に入れられるようにしてくれと心から思いました
色々考えてくれたみなさんありがとうございました
もしいい方法思い付いたらいつでも待ってます
2019/03/07(木) 01:15:09.98ID:UmWyYgm40
描写と計算止めてCopyメソッドで10万行×30列を列ごとにコピペしたら一瞬で終わったが・・・
っていうかこれ以上増やそうとするとリソース不足でエクセルが悲鳴を上げるし、どういうデータをコピーしたいんだろ
2019/03/07(木) 01:18:31.96ID:UmWyYgm40
あ、書式変わるのか・・・上のレスは忘れてください
2019/03/07(木) 02:33:57.63ID:cMWEbvvB0
コピーしてテキストとして貼り付けじゃダメなのか?
2019/03/07(木) 02:58:39.40ID:Wb+CU65ma
早い遅いは個人の感覚でしかないとおもう
2019/03/07(木) 07:14:54.02ID:RImgiSgC0
>>691
>>684 の Application.ScreenUpdating = False
は効かないのか。 画面描画が止められるよ。やってないから適当なこと言ってるかもしらんが
画面描画以外で時間がかかるってどんなだよ。 ちょっと想像できんがなあ
なんでだろう
2019/03/07(木) 07:24:21.94ID:ldY6B6U1d
>>691
valueで配列コピペした後に、セルに対してそれぞれ書式設定を手動もしくはマクロですれば?
書式は列ごとくらいは揃ってると思うし。
それもバラバラってことだと、そもそも集計の仕方が悪過ぎる。
2019/03/07(木) 07:28:16.03ID:IFVQ3Zq/0
>>674 >>678
ありがとうございます!
意図するようになりました。
-1で減らしていく発想は本当になかったのでいい勉強になりました。
このたびは本当にありかございました。
2019/03/07(木) 07:44:13.43ID:ldY6B6U1d
>>696
684じゃないけど、複雑に関数組んだりとか遅い関数が大量に入っててかつデータ数がエクセル上限近くで再計算に時間がかかるとか、あとセル上で反復計算やソルバー使ってたりするとある。
ただ684は書式がバラバラなセルを扱ってる時点で、複雑な計算をしてるとは思えないけど。
2019/03/07(木) 07:52:53.03ID:RImgiSgC0
>>699
>>675をもう一度見て来いよ。 これだぞ。そんなややこしいことしている話ではないと思うが

>表示形式が混在したセルを見た目通りのまま表示形式が文字列の別のセルにコピーするいい方法ありませんか
2019/03/07(木) 08:38:04.86ID:QURDMn8Xd
再描画等定番の部分は止めています
セル数は100万ぐらい、列数、行数分回してTextプロパティを1セルずつ配列に入れる処理だけです
シートへの貼り付け処理ではなくこの取得部分に時間がかかります
同じ回数回すAや、Format関数、worksheetfunction.textを使った場合その半分以下の時間ですが望みの結果を得る方法はわかりませんでした…
2019/03/07(木) 10:57:17.39ID:QGzmAmpt0
コピーした後NumberFormatで整えればええんちゃうん?
Dim buf() As Variant
buf = Range("A1:A3").Value
Range("B1:B3").Formula = buf
Range("b1").NumberFormat = "yyyy/m/d"
Range("b2").NumberFormat = "h:mm"
Range("b3").NumberFormat = "[$\-ja-JP]#,##0;-[$\-ja-JP]#,##0"

データが多すぎて無理?
2019/03/07(木) 10:58:23.63ID:QGzmAmpt0
アー、見た目が同じまま、「文字列」なのか・・・
すんません無視してください
2019/03/07(木) 11:39:04.19ID:OUaGUe4hM
>>675
A1:A3をコピーしてメモ帳とかに貼り付け
全選択してコピーしてB1:B3に貼り付けでできた
VBAだけで完結させる方法は知らん
2019/03/07(木) 12:41:45.56ID:g1Ak82VsF
勘違いしてる奴が多いが、自動計算を止めたり描画を止めるのは初心者が速度アップのためにやる方法で、>>675のように速度アップの為に考えて組まれている場合には効果が無い。

上級者はこういう場合に描画止めたりしないよ。
考えずに組んで面倒くさい場合にやる奴はいるかもしれんけど。
2019/03/07(木) 12:42:12.66ID:QURDMn8Xd
>>702
あとからNumberformatを適用させるんでなく配列に入れる時点で適用させる手を考えたんですが、
適用させるのにworksheetfunction.textを使うと書式に「マイナス値は[赤]」みたいな色設定があるとなぜか1004エラーが出るし、Format関数使うと表示形式が標準の時なぜか値が「標準」という文字列になってしまいます
速度的にはtextプロパティ使うよりずっと速いんですが…もう訳がわからない
2019/03/07(木) 12:46:54.74ID:g1Ak82VsF
>>675
他に方法があるか探る時間が無いので何とも言えんが、DB処理にするか、マルチプロセスで上手いことすれば早くなると思う。
2019/03/07(木) 12:50:28.91ID:g1Ak82VsF
よく考えたらDB処理は駄目な気がする。
表示部分を扱え無さそうだ。
2019/03/07(木) 18:02:24.90ID:6oCjCAip0
メモ帳にコピペすると書式が全部消えて見た目通りの文字列になる
メモ帳アプリの実体はエディットコントロールそのものだから、ユーザーフォームにエディットコントロールを貼っただけの作業場所を作って、そこ経由でコピペしてみたら?
2019/03/07(木) 18:03:18.10ID:hp531q160
UserForm1にTextBox1とCommandButton1、TextBox2とCommandButton2の計4つが配置され
UserForm2には入力フォームが配置されています。

CommandButton1からUserForm2を呼び出した時は、TextBox1に記入
CommandButton2からUserForm2を呼び出した時は、TextBox2に記入

させるには、どうすれば良いですか?
2019/03/07(木) 18:34:04.34ID:rXPjoswtF
>>709
これ、本当?
だったらクリップボード弄って高速化できるかもしれない。
2019/03/07(木) 18:34:43.55ID:qs1KmWLa0
複雑な処理でデータ量が多いなら遅くても仕方ないんじゃね?
どうせエクセルだし、専門職じゃないし、大した会社じゃないし、給料安いし
2019/03/07(木) 19:03:35.19ID:qo/Sl71gx
>>710
やり方はいくつもある
一番簡単な方法を書くと、

Userform1側の各ボタンのクリックイベント内に、任意のセルや標準モジュール上のPublic変数等にコマンドボタンのオブジェクト名をコピーする処理を書く(Me.ActiveControl.Nameでフォーム上でフォーカスされているコントロールオブジェクトの名前を取れるのでこれを使う)

Userform2側のイベントコードではそのコピーされたボタン名を読み取って書き込み先のテキストボックスを判定するようにする
2019/03/07(木) 19:11:06.28ID:ximLdO0ya
>>710
コマンドボタンのクリックイベントプロシージャで、グローバル変数に呼び出したボタン番号を格納→ユーザーフォーム2のコンストラクタでグローバル変数で分岐させる方法

もしくはコマンドボタンのクリックイベントプロシージャでユーザーフォーム2のマルチページコントロールのプロパティを変更する(value=1,2)方法もある
2019/03/07(木) 21:34:32.55ID:zt2fCEgu0
セル範囲をコピーしてクリップボードから直接二次元配列に入れるようにしたら何十秒もかかってたのが0.5秒になりました
ただ、クリップボードから切り出す時にうっかりセルの値に手を加えてしまわないかが心配です
単純にVbCrLfで行を区切って、VbTabで列を区切ってるんですがそれで問題ないんでしょうか?
2019/03/07(木) 22:48:37.99ID:6oCjCAip0
>>715
セル内改行を使ってなければそれで大丈夫
2019/03/08(金) 00:03:05.83ID:+kJkkfKW0
>>716
セル内改行入れてみたら…またこんな落とし穴が…
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況