Excel VBA 質問スレ Part51 at TECH
[2ch|▼Menu]
[前50を表示]
950:デフォルトの名無しさん
18/01/20 15:06:48.01 iefRLv2cp.net
>>918
dictionaryとかでだめかな?

951:デフォルトの名無しさん
18/01/20 17:40:00.19 91x3kJT10.net
DBMSがコンソールなんかに返した結果を
Excelセルに上手く貼り付ける方法ってある?

952:デフォルトの名無しさん
18/01/20 19:41:33.47 wJgnfOTG0.net
>>923
詳細忘れたけど代入する事で、そのまま貼り付けられるメソッドがあったはず。

953:デフォルトの名無しさん
18/01/20 20:44:55.78 Y9eKqT4m0.net
多くは語らんけどある意味エスパーと言っておこうw

954:デフォルトの名無しさん
18/01/21 13:18:30.88 +2jqUeqC0.net
>>918
ADOなら一瞬で終わる
いろいろ突っ込まれているように、別の方法のが簡単だと思うけど
シート名やら列名は読みかえてね
Dim adocon As Object, adors As Object
Set adocon = CreateObject("ADODB.Connection")
Set adors = CreateObject("ADODB.Recordset")
With adocon
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0"
.Open ThisWorkbook.Path & "\" & ThisWorkbook.Name
End With
Set adors = adocon.Execute("SELECT DISTINCT 部品名 FROM [部品表$]")
Worksheets("部品種類一覧").Range("a1").CopyFromRecordset adors
adocon.Close

955:デフォルトの名無しさん
18/01/21 15:03:53.81 pRI5Eg/X0.net
>>862
だれかこれわかる人いません?

956:デフォルトの名無しさん
18/01/21 16:45:39.61 WhYlNzfJM.net
>>918
下手にマクロ組むよりExcelの標準機能の重複削除を使え。
VBAとは違って並列処理できるから速度が段違い

957:デフォルトの名無しさん
18/01/21 18:35:28.14 7nwc0luUa.net
重複なしリストはいろいろやり方あるけど、標準機能使うかadoでやるかがスマートだろうね
dictionaryもありだけど、fsoのやつはなんか取り回しがいまいちじゃね

958:デフォルトの名無しさん
18/01/21 18:40:31.69 nVuQLEta0.net
ここ初心者スレかと思ってスレタイ見なおしてしまったわw
オレ以外初心者しかおらんやんw

959:デフォルトの名無しさん
18/01/21 18:41:57.84 EcNkRoqM0.net
メゾット君また寂しくなって来ちゃったのか

960:デフォルトの名無しさん
18/01/21 18:57:02.81 7nwc0luUa.net
.netframeworkのlistって重複削除機能なかったっけ?

961:デフォルトの名無しさん
18/01/21 20:07:47.89 +2jqUeqC0.net
>>932
リストにあるかないかはわかるみたい
これなら配列に突っ込んで総当たりしていくのと変わらなそう
読みやすくはなるけど
Dim partsList As Object
Set partsList = CreateObject("System.Collections.ArrayList")
Dim partsData
Set partsData = Range("データの列")
Dim parts
For Each parts In partsData
 If Not partsList.Contains(parts.Value) Then
  partsList.Add parts.Value
 End If
Next
出力処理省略

962:デフォルトの名無しさん
18/01/21 20:16:12.20 rQmHQ7OM0.net
>>929
> dictionaryもありだけど、fsoのやつはなんか取り回しがいまいちじゃね
意味不明
Dictionaryとfsoになんの関係があるんだ?

963:デフォルトの名無しさん
18/01/21 21:00:25.33 xouI7cQH0.net
>>918
とりま、Union関数は遅いから絶対に使うな、それだけ
セル数がちょっと増えると簡単にフリーズする
普通に配列とかに入れてった方がいい

964:デフォルトの名無しさん
18/01/21 21:12:55.02 nVuQLEta0.net
>>935
とりま、なんでいきなりそれを言いだしたのかよく分からんが
遅いのはお前のプログラムが下手糞なだけ
脈絡のない下手糞自慢ごくろうさん

965:デフォルトの名無しさん
18/01/21 21:38:18.50 Ycn/1JW20.net
require 'set'
File.readlines("ファイル名").to_set.map { |item| puts item }
Ruby の集合を使うと、以下のような行区切りのファイルを、






以下のような結果にできる。
ただし、集合にはデフォルトで、順番は無いので、
順番が必要なら、お好みの基準でソートする




966:デフォルトの名無しさん
18/01/21 21:51:29.18 EcNkRoqM0.net
毎度思うんだが、Rubyって他言語のスレにまで布教しに来なきゃならないほど不人気なのか?

967:デフォルトの名無しさん
18/01/21 22:19:18.53 Ycn/1JW20.net
Ruby だと、テキスト処理が、めちゃめちゃ簡単に作れる
他の言語のように、悪戦苦闘しない

968:デフォルトの名無しさん
18/01/21 22:23:07.58 +2jqUeqC0.net
どうせなら引っ越し準備も兼ねてPythonにしようゼ

969:デフォルトの名無しさん
18/01/21 23:23:35.81 ppfN03med.net
単純に2万個のセルをUnionするだけで1時間かかる
Sub aaa()
 Debug.Print Time
 Dim u As Range
 Set u = Cells(1, 1)
 For r = 3 To 40000 Step 2
  Set u = Union(u, Cells(r, 1))
 Next
 Debug.Print Time
End Sub

970:デフォルトの名無しさん
18/01/21 23:45:19.36 Ycn/1JW20.net
2万個のデータは、テキストデータだけなら、1MB ぐらいだろ
>>937
のRuby でのテキスト処理なら、1秒ぐらいじゃないか?

971:デフォルトの名無しさん
18/01/22 00:04:49.43 R+7srG110.net
>>942
空気読んでね



972:アこはテキスト処理の質問スレじゃなくて Excel VBAの質問スレだから



973:デフォルトの名無しさん
18/01/22 01:20:01.78 pYe1Cwj70.net
そんなに時間が掛かるのなら、一旦データをエクスポートして、
データをテキスト処理してから、インポートして戻せば?
たかが、2万個のデータで、1時間は現実的ではない
そんなに時間が掛かっても、どうしても、VBA でやりたいのか?

974:デフォルトの名無しさん
18/01/22 01:43:29.00 zmIcszTc0.net
あくまでUnionを使った場合であって高速に処理する方法はいくらでもあるからなぁ。
それに仕事でVBA使う環境だと他社との協調も考えなきゃいけないからRubyインストールする方がよっぽど非現実的だし。
まぁ、たぶんおちょくってるつもりなんだろうけど、そもそもVBA以外の環境がないって前提のスレだから、
Rubyマンの煽りが煽りになっていないっていう・・・。

975:デフォルトの名無しさん
18/01/22 04:08:31.22 Xp9Ai2fT0.net
重複の削除はワークシートでやった方がてっとり早いと思う

976:デフォルトの名無しさん
18/01/22 04:38:17.99 AE7SVx7N0.net
>>945
> そもそもVBA以外の環境がないって前提のスレだから
そんな前提で質問に来る人もいるだろうけど、
「最適解」を求めている人が、とりあえずVBAだとどうなるか、と思って質問する場合もあるでしょ
だから、質問者が「全体にVBA以外はダメ」って制限をかけていない限りは、
上でも、ACCESSを進めている人もいたけど、実用面から考えた回答も質問者の利益になると思うんだけど
(質問者がそう思っていても、何も知らないからそう思ってるってパターンすらあり得るかな)

977:デフォルトの名無しさん
18/01/22 05:56:27.49 zmIcszTc0.net
>>947
Excel VBA質問スレでの「実用面」は、一般的な企業向けWindows PC(Office製品入り)で出来る事に制限されると思うけど。
それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。
だいたい他の言語に興味があるなら、その言語のスレで質問すりゃいいわけだし、
どんな自己弁護をしたところで特定言語のスレで他言語の話をする理由にはならないよ。
せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、
Rubyスレに誘導して、そちらで話を展開すべきだね。

978:デフォルトの名無しさん
18/01/22 08:37:35.39 AE7SVx7N0.net
>>948
> それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。
リアルでも、相手に聞きもせずに勝手にそんな縛りをかけて要件定義する人はいないと思うよ
> せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、
> Rubyスレに誘導して、そちらで話を展開すべきだね。
環境を聞くのは勿論ありだが、「○○だとより簡単にできるよ」ってこちらから言う事に何の問題があるのか?
今ある環境内で必ず実現する必要があるなら別だが、そうでない場合もよくあることでしょ
ま、いずれにせよ、何も聞かないうちに勝手に「○○に違いない」って決めつけるのは、
要件定義では一番しちゃいけないことだよ

979:デフォルトの名無しさん
18/01/22 10:06:54.55 zmIcszTc0.net
>>949
仕事している風を装いたいんだろうけど、明らかに経験が無いの丸出しなんだよな・・・。
そもそもVBAスレでRubyの話を出してくる事自体が問題なんだよ。
君が問題になっているのは要件定義の話ではなく開発環境の話だ。
明確な線引きをするなら、このスレではxlsmに記録し、特別な準備なしに実行できるものでなければ、何であれ許容範囲外だ。

980:デフォルトの名無しさん
18/01/22 10:12:50.46 JFwvghX1M.net
またそうやって明文化されてもいない自分ルールを展開していくー

981:デフォルトの名無しさん
18/01/22 10:23:32.81 zmIcszTc0.net
明文化されてはいないけど、過去から今までのスレでの反応を見る限りは、
だいたいxlsmファイル単体でマクロの実行が補完できるかどうかが拒絶反応の出る出ないを分けてるよ。
ただ個別にマクロが記録された二つ以上のファイルを連携させる場合の話もあるから「xlsmに記録し、準備なしに実行可能な」と定義しただけ。
押しつけるつもりはないけど、この定義で問題が無ければテンプレに加えてキチ避けしてほしいくらい。

982:デフォルトの名無しさん
18/01/22 11:30:49.09 r0T2WJT6a.net
>>934
ごめんscriptingRuntimeのやつ、の間違いだ

983:デフォルトの名無しさん
18/01/22 11:33:07.33 y0jssaARd.net
VBAをメインとして他言語も補助的に使う。
それなりにあると思う

984:デフォルトの名無しさん
18/01/22 15:12:56.07 EwN8a0pa0.net
同じ現象が起きるようにできるだけ簡単なコードを用意しました
まっさらなxlsmにUserForm1を挿入し、TextBox1とTextBox2を横に並べます
UserForm1モジュールに下記のようにコードを記述します
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 39 Then
With TextBox2
.SetFocus
.SelStart = 0
End With
End If
End Sub
UserForm1を呼んだ後、TextBox2にabと記入します
このとき、TextBox1からTextBox2に矢印キー右でうつろうとするとaの前ではなくaとbの間にカーソルが来てしまいます。
どうすればaの前にカーソルが来るようになりますか?もちろんabは例示にすぎずいろんな文字列が入ります
よろしくお願いします

985:デフォルトの名無しさん
18/01/22 15:25:33.05 EwN8a0pa0.net
>>955ですけど、KeyCode=40、つまり矢印キー下にセッティングして
TextBox1から2に移ると頭にカーソルきますね
ということは、入力した矢印キー右がTextBox2に移ったあとも生きててその影響が出てるってことですかね
まぁ原因分かっても解決方法が分からないのですが

986:デフォルトの名無しさん
18/01/22 16:37:43.27 DgxtyBXU0.net
試していないけれど
With TextBox2 の前に
KeyCode = 0 を入れたらどう

987:デフォルトの名無しさん
18/01/22 17:07:09.72 +/nnDvsjM.net
>>954
VBAでは書きにくい or 実行速度がめちゃ遅い
かつ
その言語なら簡単に書ける or 実行速度が速い
ならありうると思う
なのでAccessとかADOならまだわかるけどRubyはないな

988:デフォルトの名無しさん
18/01/22 22:49:33.42 EwN8a0pa0.net
>>957
しゅごい・・・できました
ありがとうございました

989:デフォルトの名無しさん
18/01/24 10:46:16.37 QE61Ho6h0.net
。と。の間に入ってる文字を全部同じ文字に置換したい場合ってどうすればいいでしょうか?
。。       →。ccc。
。akok。    →。ccc。
。3293i9ia。  →。ccc。
みたいな感じです

990:デフォルトの名無しさん
18/01/24 11:16:56.30 QE61Ho6h0.net
すいません数式の中の。と。の間の文字を置換でした

991:デフォルトの名無しさん
18/01/24 12:30:55.33 4OtF4psx0.net
数式の中のってのがよくわかんないから実際の数式を書いてくれ

992:デフォルトの名無しさん
18/01/24 13:09:34.71 QE61Ho6h0.net
こういう事がやりたいって感じです
わかりづらくてすいません
=123456789(この9桁の数字はランダム) → =123ccc789
=123456789(この9桁の数字はランダム) → =12ccc3456789

993:デフォルトの名無しさん
18/01/24 13:24:33.86 96uZKYcfd.net
>>963
。の話はどこへいったんだ?

994:デフォルトの名無しさん
18/01/24 13:52:49.81 QE61Ho6h0.net
いやこっちの方がわかりやすいかなとw

995:デフォルトの名無しさん
18/01/24 14:37:17.59 626EYBnb0.net
2週間くらい前から、
フォームコントロールのボタンを配置すると
エクセルファイルの起動が
いつもの起動時間の5倍くらいかかる様になり困っています。
ちなみに、新規のファイルでも同じ現象になり、
他のパソコンでも同じ現象になっています。
どなたか、解決方法を知らないでしょうか?
今使っている環境は
Windows 10、バージョン 1709
Excel2016 バージョン 1712
です。

996:デフォルトの名無しさん
18/01/24 14:47:11.88 LHEOU22dM.net
>>965
草生やしてんじゃねえよ真面目に質問しろ

997:デフォルトの名無しさん
18/01/24 16:00:42.34 eVK1iV6m0.net


998:デフォルトの名無しさん
18/01/24 17:24:26.92 QE61Ho6h0.net
なんでwなんて打ったのか・・・反省してます

999:デフォルトの名無しさん
18/01/24 17:48:11.23 cTEKAhE2M.net
>>969
VBA 正規表現 置換
でググれ

1000:デフォルトの名無しさん
18/01/24 19:49:39.94 4OtF4psx0.net
>>963
みんなこれでわかるの?
上と下に規則性があるように見えないんだが
上は値を置き換えてて、下は挿入してるよね

1001:デフォルトの名無しさん
18/01/24 20:02:49.35 XHxrtrwiM.net
わかりません

1002:デフォルトの名無しさん
18/01/24 21:10:53.71 6b5evSsja.net
>>918
そのテキストファイルがCSVファイルみたいにカンマ区切りで
ヘッダとして項目名が付いてて項目名に重複が無ければ
そのファイルにSQLぶん投げて結果セット取ってこれるんだけどなぁ

1003:デフォルトの名無しさん
18/01/24 21:14:29.60 .net
地道にループぶん回してFomulaLocalとInStrとMidしてちょ

1004:デフォルトの名無しさん
18/01/24 21:29:25.29 l13g0WQj0.net
いや、ループするにしても
VbScriptingDictionary使うかCollection使って
値をキーとして登録して
同じキーがあれば無視、無ければ登録追加で
最後にその取っておいた内容を
展開するようにすればそこそこのレスポンスで
行けるんじゃないかな。
SQLで行けるならそれが最速だとは思うけど。

1005:デフォルトの名無しさん
18/01/25 19:41:38.87 x0ph6Erf0.net
ちゃんとしたDBMSならともかく、エクセル表にSQL投げて実行速度が速いとか考えられんけど

1006:デフォルトの名無しさん
18/01/25 21:14:11.87 xVw6nJl50.net
ADOだとそれなりに早いイメージなんだけど
実際はどうなのかね
誰か検証していてもよさそうだが

1007:デフォルトの名無しさん
18/01/25 22:04:13.28 BYFi0PM80.net
一項目だけの比較なんかだとVBAでやるのと変わらないけど、色々と条件が増えていくとSQLの方が速度が落ちにくい。
あと他の誰かが見ることも考慮すると、SQLで見えるようにしておいた方が分かりやすい。
ただExcelでSQLというのは絶望的に使いづらい。

1008:デフォルトの名無しさん
18/01/25 22:28:41.91 3kW0jqmr0.net
UPDATEはできるけどDELETEができないんだっけ?

1009:デフォルトの名無しさん
18/01/25 22:46:48.37 2HN+h3+60.net
できなくてもやらなきゃいけない時があるんだよ男にはな

1010:デフォルトの名無しさん
18/01/26 10:16:15.47 i1V2CYFLa.net
エクセルのテーブル機能ってどうなんよ
あんまり使わんから馴染みないんだけどsql使いやすくなったりせんの?

1011:デフォルトの名無しさん
18/01/26 14:00:22.47 ewTTza6/0.net
>>980
猫もだよ
穴に逃げた虫を懸命に取ろうとしている

1012:デフォルトの名無しさん
18/01/26 19:52:38.86 uoysLyn50.net
こういうのを見ると
早くPython導入して欲しいって思うよな
アンケート取られてたからちょっと入門見たけど結構面白いわアレ
こういった集約的なことに関してもずっと楽に作れそう
VBやC#でも後の方で覚えることになるラムダ式や
イテレーターとかごく基本的な当たり前のこととして
いきなり最初から出てくるし

1013:デフォルトの名無しさん
18/01/26 20:26:28.69 Vo+OzJVu0.net
VBAですら暴走しまくりのお前らにpythonなんか与えたら社会を困らす力作マクロ()がますます増えちゃうじゃんかw

1014:デフォルトの名無しさん
18/01/26 20:36:36.35 VXa7znFt0.net
コードをまともに読み書き出来ないメゾット君が心配するような事でもないけどな

1015:デフォルトの名無しさん
18/01/26 22:00:17.36 mlDN6tJ0d.net
VBAを廃止なんてできるわけないからPythonと入り乱れたプログラムになるんだろーか?

1016:デフォルトの名無しさん
18/01/26 22:15:41.07 pXxYwYu40.net
職場の環境じゃVBAくらいしか選択肢がない

1017:デフォルトの名無しさん
18/01/26 22:23:52.83 Ji/nweCn0.net
>>987
URLリンク(forest.watch.impress.co.jp)

1018:デフォルトの名無しさん
18/01/26 22:40:51.06 VXa7znFt0.net
影響するのは最新バージョンだけだろうし、Excel版Pythonの初期バージョンだと使い物にならなかったり参考文献が少なかったりの問題で、
本格的に使われるようになるにしても五年以上かかりそう。そしてそこからさらに数年経たないと、そのバージョン使う会社が出てこなさそう。
っていうか今までもVBAをVB.Netへ移行させようとして失敗してたらしいし、AIブームに乗じた一時的なもんで実現しないんじゃないの。

1019:デフォルトの名無しさん
18/01/27 00:23:34.40 .net
Pythonって起動にめっちゃ時間がかかるから(5秒くらい)
普段使いのちょっとしたツール作るには使い物にならないという印象

1020:デフォルトの名無しさん
18/01/27 00:36:59.48 Xe+uGT7T0.net
多分Python載ったとしてもしばらくはVBAと共存だろうとは思う。
勉強嫌いな爺さん達にはPythonが来るのは驚異以外の何物でもないかも知れないけど
導入されたら少なからず徐々に普及し始める。
なぁに、EXCELの中のコンパクトに纏まった世界の話だし
勉強するにはうってつけだと思う。
少なくとも今後のVBAよりは次に繋がるよ。

1021:デフォルトの名無しさん
18/01/27 01:00:30.81 /Onm91iZa.net
今まで言語を変えるような具体的な話は出てなかったからなぁ
まさかObject指向言語じゃなくていきなり関数型言語が来るとはなぁ

1022:デフォルトの名無しさん
18/01/27 01:49:19.54 mMQhkopa0.net
PythonはAIブームの収束と共に消えていきそうな雰囲気だから将来性っていうと疑問が・・・。

1023:デフォルトの名無しさん
18/01/27 08:00:53.71 lEBNH3fnr.net
ツッコミどころ多すぎだけどとりあえずw
オマエがギモンを感じるなw

1024:デフォルトの名無しさん
18/01/27 08:16:06.57 ZgMGVzLO0.net
>>990
> Pythonって起動にめっちゃ時間がかかるから(5秒くらい)
さすがにPC買い換えようよ...

1025:デフォルトの名無しさん
18/01/27 11:01:00.79 Nudrd5lRF.net
Excel Python 質問スレ
スレリンク(tech板)

1026:デフォルトの名無しさん
18/01/27 14:29:11.91 arqbrGPuM.net
VBAがくっそ使えない言語だから普通はpython大歓迎でしょ…

1027:デフォルトの名無しさん
18/01/27 15:20:10.85 cbFXqoc10.net
VBA嫌いじゃないけど、Phythonの方が明らかにエレガントなコーディングできそうだから歓迎しかないわ
VBAは参照設定したら使える程度のものになるんじゃないか?

1028:デフォルトの名無しさん
18/01/27 15:44:26.54 +7hAxrT3a.net
どんな言語だってできる奴はできる。
VBAが駄目だとか言う奴に限って碌なコード書けない奴ばかりなんだよなあ。

1029:デフォルトの名無しさん
18/01/27 16:05:43.43 arqbrGPuM.net
こんな書いててストレスマッハの言語はないからな
まあ全員パイソンいくでしょw

1030:デフォルトの名無しさん
18/01/27 16:11:26.72 3QIsbpwxM.net
VBA→javascript→Pythonの順に覚えたけど何がそんなにストレスなのかよく分からん

1031:デフォルトの名無しさん
18/01/27 17:39:06.57 Xe+uGT7T0.net
それより次スレは?

1032:デフォルトの名無しさん
18/01/27 19:59:27.66 QIG/4o8/0.net
>>998パイソンやとスレで相談したいときに
質問スレではインデント崩れて悲惨なことになってるな

1033:デフォルトの名無しさん
18/01/27 20:30:03.5


1034:6 ID:Xe+uGT7T0.net



1035:デフォルトの名無しさん
18/01/27 22:07:33.55 845Tmzax0.net
>>1004

1000ゲット

1036:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 80日 10時間 41分 3秒

1037:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

2252日前に更新/339 KB
担当:undef