25/06/04 16:28:29.01 3c6clsCg.net
標準の改行コードはOSによって違う
CR、LF、CR+LF、LF+CR、すべてのパターンが実在する
フィールドに改行やコンマを含めたい場合、レコードの区切りと違うコードを割り当てる場合もあれば、クォートなどの記号でフィールドの範囲を明示する場合もある
Windows版Excelはダブルクォートでフィールドの範囲を指定するのが基本
936:デフォルトの名無しさん
25/06/04 16:30:20.58 3c6clsCg.net
>>915
それは固定長かセパレータ(コンマ)の数をカウントしてるかどっちかかな
937:デフォルトの名無しさん
25/06/04 18:23:31.04 RQn0r/Lq.net
>>916
CR MacOS(UNIX化前)
LF UNIX、MacOS(UNIX化後)
CR+LF Windows、DOS
LF+CR ← なんてOS?
938:デフォルトの名無しさん
25/06/04 18:39:20.47 f2CAL3f8.net
>>909
RPAにしろ、ノーコードにしろ、なんにしろ、そうなりますよね。
結局社内でどれだけ学習意欲のある人を揃えるかによりそう。
939:デフォルトの名無しさん
25/06/04 19:22:49.50 7S8kDVf/.net
>>913
由来のタイプライターを鑑みたらLFは本来行頭に来るべきものだけど、
現実的には行末
940:デフォルトの名無しさん
25/06/04 19:55:51.24 frrYvMiA.net
頑張ってVBA勉強したところでプログラミングスキルとしては流石に時代遅れ&最底辺だし、
事務員としてスキルアップしたいならツールに入れ込むより業務知識を強化した方がいいし、
組織の中で出世したいなら自分でVBA書くより他人に書かせて継続的にスケールする仕組みを作るべき
そして、めでたく業務効率化できたとして、いず」行き着く先は「脱Excelで属人化解消&業務効率化」でVBA職人は悪者扱いだ
本当にVBAを広めたいのなら、個人の意欲に頼るのではなく、組織として適切なインセンティブを設けることだな
941:デフォルトの名無しさん
25/06/04 20:02:53.71 f2CAL3f8.net
>>921
結局、経営者次第だよね
まるでITや業務効率化に興味がないなら何もできない
社員の進言に耳を傾けないなら騙されもするし、せ
942:っかく導入したツールは社員にとって非常に使いづらい
943:デフォルトの名無しさん
25/06/05 00:29:50.41 Nu77Yg2O.net
>>921
そっか
あなたはこのスレ卒業だね
944:デフォルトの名無しさん
25/06/05 08:17:29.72 FSpPjL7A.net
四行目までは自虐だろ? 言いたいのは五行目だけって意味と捉えたが、どうなんだ
まあ、ちょっと過剰に反応し過ぎなきらいは否めないが
945:デフォルトの名無しさん
25/06/05 08:45:28.01 Lp1WVm/I.net
>>921
組織の中で継続してスケールする仕組み作ったなら属人化してないんだから悪者になる理由なくない?
946:デフォルトの名無しさん
25/06/05 09:07:39.20 FSpPjL7A.net
お利口さんに成ろうとしてアタマでっかちに成り過ぎ
大工だっていろんなレベルもあるし色んな層が大工してる
その場しのぎのやっつけ大工も居れば、客の要望を叶えるために青写真から描ける熟練大工もいる
新人大工なら木の特性とか部材同士の相性とかもよく理解しないまま最新部材使って威張ってみたり
ガルバリウムには使ってはいけない釘平気で使って1~2年後にはその部分からサビを拡げる原因作って顰蹙買うし
それでも世の中は回ってる
改善なんか数年で変化してくものだ、という前提を踏まえてれば、それに見合うコストで運用出来てれば御の字
947:デフォルトの名無しさん
25/06/05 10:31:37.20 1teg7ITB.net
>>925
コンサルはいわゆるExcelバケツリレーの非効率さを指摘してくるのが常道
VBAで個々人の作業が省力化されてようとフローは変わらないので、実際非合理だから仕方ない
その上で現行業務の調査として関係者全員にヒアリングして介在するワークシートやマクロをつぶさに調査するのにかかる莫大な費用の見積りを提示されると、
もう経営層からはVBA職人なんて非効率な業務を助長するだけの排除すべき敵としか見えなくなるわけよ
948:デフォルトの名無しさん
25/06/05 10:49:41.34 1teg7ITB.net
あと、業務を見直してシステム化しようとした際にVBAが悪者になる大きな原因として、
一見簡単な処理に見えて蓋を開けたらたまに複雑怪奇な難攻不落の化け物が出てくる、ってのがある
これ、Excel中心のワークフローをシステム化する際にはよくある話で、スケジュール遅延や予算超過を引き起こすことが多い
そうなるとシステム部門や現場が経営層に頭下げるのは当然として、上場企業だと株主に経営層が謝罪なんてケースもある
ここまでくるともうVBAなんて悪者もいいとこよ
949:デフォルトの名無しさん
25/06/05 10:55:09.32 Lp1WVm/I.net
それらは継続してスケールする仕組みを作れていない場合の話じゃないの?
複雑怪奇な難攻不落の化け物って、それスケールできる仕組み作れてなくない?
そもそもの話が噛み合ってないよ
950:デフォルトの名無しさん
25/06/05 11:09:55.37 1teg7ITB.net
>>929
隅々まで適切にガバナンスを効かせながら使うならいいんじゃない?
それができるほどの優秀なリーダーがVBAを選ぶかは疑問だけどな
どんな組織でも、人が増えれば馬鹿も増えるし目も行き届かなくなるものだ
951:デフォルトの名無しさん
25/06/05 11:27:50.93 Z5osrhWk.net
Excelバケツリレーは業務や人員を追加していく分にはスケールするよ
後から変更するのが困難でありシステム化が前提なら極めて非合理だけ
952:デフォルトの名無しさん
25/06/05 17:48:57.22 lb5raFks.net
>>928
IR出すレベルのVBAは確実に一見簡単そうな処理では無いと思います。
そこまでの規模のシステムなら、それこそ何かしらの製品やサービスを導入してください。
953:デフォルトの名無しさん
25/06/05 17:54:18.01 lb5raFks.net
ローコードツールや多言語の方がいいのはその通りだと思います
VBAはOfficeしか扱えないのだから
954:デフォルトの名無しさん
25/06/05 18:20:52.21 uYkJABQ4.net
> VBAはOfficeしか扱えないのだから
AutoCAD、SOLIDWORKS、・・・
955:デフォルトの名無しさん
25/06/05 18:33:57.70 Lp1WVm/I.net
>>933
そうなんだ?知らなかった
956:デフォルトの名無しさん
25/06/05 20:15:40.58 r0Qxvap7.net
そもそもパッケージやクラウドサービス使えば、中身は全くわからない
手の出しようがない
自前なら何とかなる
そこをどう捉えるかよ
そもそも基幹システムをVBAで作らないし
(小企業は知らんが)
作っても枝葉よ
957:デフォルトの名無しさん
25/06/05 20:29:53.99 lb5raFks.net
>>936
C、CSVで吐き出せればなんとか(震え声)
TYPEを全く使ってこなかったのです。
しかし、この度同じモジュールで多数のstring型の変数を宣言する必要があります。
TYPEデビューしようと思うのですがどうでしょうか?
958:デフォルトの名無しさん
25/06/05 23:29:45.76 fxlZJI+h.net
ここで聞かなきゃいけないような馬鹿はやめとけ
959:デフォルトの名無しさん
25/06/05 23:53:54.23 r0Qxvap7.net
>>937
type稀にしか使わないので調べたら
CollectionやDictionaryに格納できないと
マジか、知らなかったわ
これに使うならクラスにしたらいいかもね
960:デフォルトの名無しさん
25/06/05 23:57:55.29 0HOZWCXV.net
>>920
リアルタイプライターではLFの位置は任意だよ
行頭とか行末とか関係なく、行の途中でも好きな所でline feedは可能
961:デフォルトの名無しさん
25/06/06 01:00:59.18 gfk/0ela.net
>>940
CRLFはCRが来る時点でLFが行末じゃなくなるって話
962:デフォルトの名無しさん
25/06/06 08:39:00.12 cx/TERMm.net
Enterキーの矢印ってLF-CRだよね
↓
←
CR-LFならこういう向きじゃないとおかしい
←
↓
963:デフォルトの名無しさん
25/06/06 09:32:23.47 rGtsPzUl.net
VBAでクラスモジュールを使っていろいろやるのもなしとは言わないけれど、それなら正直JavaとかPythonとかの普通の言語を勉強した方が良いような気もするかな。クラスモジュールって、よくある普通の言語とはちょっと違ったVBA固有の仕様に過ぎないし。
964:デフォルトの名無しさん
25/06/06 09:44:39.10 4a1tHPn5.net
>>943
JavaScript様のプロトタイプに喧嘩売る気か
965:デフォルトの名無しさん
25/06/06 10:07:22.76 NfW6LToZ.net
クラスモジュールはVBA固有というかCOMの仕様
COMの絡まない処理で無理に使う必要は全く無いし、COMを理解してないと不可解な仕様が多い
966:デフォルトの名無しさん
25/06/06 10:45:07.80 c6RrnkVo.net
他言語でクラス使ってたらクラスモジュール作りたくなる病
967:デフォルトの名無しさん
25/06/06 11:16:07.96 FmZludjM.net
COMってどう勉強するんだろ
漠として簡潔な説明がなかなかなく
IUnknownやらなんやら、
968:デフォルトの名無しさん
25/06/06 11:35:48.78 3VaYoART.net
InsideCOMを辛抱強く読むのが唯一の道
それ以上の資料もかみくだいた解説書もない
969:デフォルトの名無しさん
25/06/06 18:33:04.93 lAxJJHmL.net
っ URLリンク(learn.microsoft.com)
URLリンク(learn.microsoft.com)
970:デフォルトの名無しさん
25/06/06 18:52:09.71 4a1tHPn5.net
COMの解説
URLリンク(learn.microsoft.com)
971:デフォルトの名無しさん
25/06/06 19:13:06.68 fJneNGsq.net
>>939
TYPEは他のオブジェクトに引き渡せないとは聞いていました
結局ディクショナリーで登録しました
972:デフォルトの名無しさん
25/06/06 20:17:15.03 tc8PGxli.net
>>951
ディクショナリだとインテリ使えんけど、まあそれでいいなら
973:デフォルトの名無しさん
25/06/06 20:34:48.52 2QLQ97JJ.net
たまにいる勘違い人間 「自分、CやJavaできるから低レベルのVBA(笑)なんてすぐマスターできるし」とか豪語するヤツ
974:デフォルトの名無しさん
25/06/06 21:03:29.16 fJneNGsq.net
私はファイルパスやフォルダパスの取得や設定、ファイル名やフォルダ名の作成に冗長なコードを書いている気がしてならないのですが、何かいいコードはないでしょうか?
975:897
25/06/06 21:52:26.62 CfJ/EVmD.net
Typeの代わりにRecordSet使ったりする Field設定いちいちするの面倒だけど
Filterとか使えるしCopyFromRecorSetとかできるし
976:デフォルトの名無しさん
25/06/07 01:20:40.40 hTJ86lb5.net
>>954
昔はdirやnameだったけど、今はfso使ってればいいんじゃね
977:デフォルトの名無しさん
25/06/07 04:19:49.26 GCIZhVy1.net
>>954
その程度の処理なら、冗長で困ることなんかほとんどないよ
自分に理解できる形で書くのが、長い目で見れば一番保守性が高いんだから
ちゃんと
978:動いてる物を直そうとして壊すことも多いから、そっとしとけ
979:デフォルトの名無しさん
25/06/07 07:03:08.54 QQtzQfGp.net
>>954
末尾の円マーク有無で毎回処理を分岐させてるのならBuildPathを使え
980:デフォルトの名無しさん
25/06/07 09:36:28.54 zGsllLLl.net
>>954
その冗長なコードとやらを貼ってみれば何が悪いか指摘してもらえると思うぞ
981:デフォルトの名無しさん
25/06/07 10:26:27.74 pGBLBsE0.net
.netの文字列操作ライブラリとか見たらいたせりつくせりで贅沢過ぎるわ!って怒り出しそう
982:デフォルトの名無しさん
25/06/07 12:33:58.98 NHsDgqoS.net
タスクバーのアイコンを取得したくて、下記のサイトのC#をVBAに移植しても、Excelがハングアップする
C#ではちゃんと動く
なぜ?
Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hTaskBar)
↓
URLリンク(learn.microsoft.com)
983:デフォルトの名無しさん
25/06/07 13:25:32.25 QQtzQfGp.net
URLリンク(qiita.com)
↑ここの人がVBAで似たようなことやってますね
GetReferenceElementという関数の中に >>961 と同等のコードが書かれているから
hTaskBarの値がおかしいんじゃないの?
これでブラウザの自動操縦できるのかぁ 便利そうだな
984:デフォルトの名無しさん
25/06/07 13:32:49.76 NHsDgqoS.net
>>962
このサイトも見た
hTaskBarの値は、C#版とVBA版で同じ値だったので、正しいと思う。
Chromeのウィンドウハンドルでやった場合は、ちゃんと動いた
985:デフォルトの名無しさん
25/06/07 13:58:10.47 QQtzQfGp.net
これで最後の行まで動いたよ
Dim hWndTray As LongPtr: hWndTray = FindWindow("Shell_TrayWnd", vbNullString)
Dim hWndRebar As LongPtr: hWndRebar = FindWindowEx(hWndTray, 0, "ReBarWindow32", vbNullString)
Dim hWndMSTaskSwWClass As LongPtr: hWndMSTaskSwWClass = FindWindowEx(hWndRebar, 0, "MSTaskSwWClass", vbNullString)
Dim hWndMSTaskListWClass As LongPtr: hWndMSTaskListWClass = FindWindowEx(hWndMSTaskSwWClass, 0, "MSTaskListWClass", vbNullString)
Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndMSTaskListWClass)
MsgBox "終わり"
986:デフォルトの名無しさん
25/06/07 14:07:56.34 QQtzQfGp.net
もうひとつの方もこれで動いた
Dim hWndTray As LongPtr: hWndTray = FindWindow("Shell_TrayWnd", vbNullString0)
Dim hWndTrayNotify As LongPtr: hWndTrayNotify = FindWindowEx(hWndTray, 0, "TrayNotifyWnd", vbNullString)
Dim hWndSysPager As LongPtr: hWndSysPager = FindWindowEx(hWndTrayNotify, 0, "SysPager", vbNullString)
Dim hWndToolbar As LongPtr: hWndToolbar = FindWindowEx(hWndSysPager, 0, "ToolbarWindow32", vbNullString)
Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndToolbar)
MsgBox "終わり"
987:デフォルトの名無しさん
25/06/07 15:15:58.64 NHsDgqoS.net
>>965
あ、
Windows 11だと動かないな…
>>964のタスクバーのボタンは動いたけど、
>>965のトレイアイコンは、最後の1行で、やっぱExcelごとハングアップで強制終了するわ
(Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndToolbar))
C#版は、>>965のトレイアイコンもちゃんと動くんだけど…
988:デフォルトの名無しさん
25/06/07 16:04:31.64 I++ihMYF.net
>>959
例えばファイルシステムで
フォルダ1の中から指定の文字列を含むフォルダを探して
見つかったフォルダのパスを取得して
さらにそのフォルダの中から指定の文字列を含むフォルダを探して
見つかったフォルダのパスを取得して
そのフォルダの中に指定のフォルダがあるか確認してなかった場合はフォルダを作成するコードです
2〜3回同じ様な事を繰り返しているので冗長な気がしてなりません
989:デフォルトの名無しさん
25/06/07 16:09:10.87 WTKqP7i+.net
>>967
それそのままAIに投げたら一瞬で書いてくれるよ
990:947
25/06/07 16:28:51.74 ADmBeqPj.net
>>948, 949, 950
ありがとうございます
マイクロソフトのサイトは機械翻訳がどうも…、と敬遠していましたが、参照してみます
それから洋書、かぁ…
991:デフォルトの名無しさん
25/06/07 17:36:52.86 hTJ86lb5.net
>>967
それを平で書いてるなら冗長
再帰処理でやるのがあるべき姿
まずは指定フォルダ下の全フォルダを出力する再帰処理書いてみ
(全てが再帰処理ではない。呼び出し元処理と再帰処理の2つ書くことになる。念の為)
992:デフォルトの名無しさん
25/06/07 17:47:31.26 QQtzQfGp.net
>>966
Windows11はタスクバーに使われてるクラスが変わってるらしいから関係あるかもよ
URLリンク(www.autohotkey.com)
AHKにクラス名を調べるツールがついてたような
993:デフォルトの名無しさん
25/06/07 17:55:49.45 nK7i38Q0.net
>>967
こんなのかな
>フォルダ1(Path1)の中から指定の文字列を含むフォルダ(Pattern1)を探して見つかったフォルダのパス(Path2)を取得する
Path2 = GetPatternPath(Path1, Pattern1) As String
>さらにそのフォルダ(Path2)の中から指定の文字列(Pattern2)を含むフォルダを探して
>見つかったフォルダのパス(Path3)を取得する
Path3 = FindPatternPath(Path2, Pattern2) As String
>そのフォルダ(Path3)の中に指定のフォルダ(Pattern3)があるか確認してなかった場合はフォルダを作成するコードです
result = CheckPatternPath(Path3, Pattern3) As Boolean
If result Then
Call MakePatternPath(Path3, Pattern3)
End If
あとは関数の中身を書くだけ
994:デフォルトの名無しさん
25/06/07 18:21:21.32 QQtzQfGp.net
>>967
ShiteiNoMojiretsu = "指定の文字列"
Shitei = "指定"
Path = "C:\フォルダ1"
Path = Path & "\" & Dir(Path & "\*" & ShiteiNoMojiretsu & "*", vbDirectory)
Path = Path & "\" & Dir(Path & "\*" & ShiteiNoMojiretsu & "*", vbDirectory)
If Dir(Path & "\" & Shitei, vbDirectory) = "" Then
MkDir Path & "\" & Shitei
End If
995:デフォルトの名無しさん
25/06/07 18:49:45.58 NHsDgqoS.net
>>971
んー
でも、C#ではちゃんと動くので、VBA側の問題な気が…
クラスが変わってるのも知ってる。
996:デフォルトの名無しさん
25/06/07 22:19:45.07 I++ihMYF.net
>>970
やっぱりそうですよね
再帰処理を頑張って覚えます
997:デフォルトの名無しさん
25/06/08 02:30:07.18 bVJzS0fI.net
>>975
そやね
たったこれだけでフォルダ階層どこまでも潜れるのかと感動すると思う
(かもしれないw)
フォルダ再帰ができたら各全ファイル名列挙も再帰処理の中に追加しとき
いつか使う時が来る
998:デフォルトの名無しさん
25/06/08 03:49:16.50 kACuu3za.net
こんなので偉そうにする馬鹿
999:デフォルトの名無しさん
25/06/08 10:13:48.24 szoadHGe.net
>>977
わざわざ「私バカです」って手を挙げて出てきてどうした
1000:897
25/06/08 10:59:09.81 BE7fUg1L.net
>>976
昔だったら stack overflowとか心配してたけど今はあまり気にしなくて良さそうだね
1001:デフォルトの名無しさん
25/06/08 11:01:04.08 j4jIPbHU.net
.netのAPIラッパー関数もソース見ると大抵泥臭い事やってんのよね
1002:デフォルトの名無しさん
25/06/08 11:03:50.75 4qkaLQIW.net
スタック領域は昔からほとんど変わってないから気にする必要はある
1003:デフォルトの名無しさん
25/06/08 11:07:37.10 j4jIPbHU.net
Excel VBA 質問スレ Part83
スレリンク(tech板)
1004:897
25/06/08 11:11:01.02 BE7fUg1L.net
>>982
乙彼
>>981
共有サーバのアドレス変わった時、全フォルダの奥までショートカット探して書き換えたけど
何ともなかったからそんなもんだと思ってた
1005:デフォルトの名無しさん
25/06/08 12:43:48.49 gXHyLlYW.net
>>976
再帰処理のコード自体はわかるのですが、If文で再帰処理をする、しないまでは考えてなかったです
1006:デフォルトの名無しさん
25/06/08 14:43:09.01 bVJzS0fI.net
>>984
if?
途中から折り返す時のこと?
それなら必要
1007:デフォルトの名無しさん
25/06/08 16:28:21.07 46RFXcFD.net
2階層しか掘らないのにわざわざ再帰処理にするかなぁ
1008:デフォルトの名無しさん
25/06/08 16:56:20.91 DI4VVn6/.net
>>978
構ってもらうのも大変なんだぞ
察してあげなきゃ
1009:デフォルトの名無しさん
25/06/08 17:17:56.33 8915HtnW.net
>>983
スタックさせたまま全ファイル走査なんてしないだろうから、
ファイルの数何個あろうが同じでは?
1010:デフォルトの名無しさん
25/06/08 19:19:30.01 4BwIalv3.net
ソース的に簡単にするなら全ファイルのフルパス取って正規表現だな
1011:デフォルトの名無しさん
25/06/09 07:30:24.52 UIpY0QNU.net
フォルダのショートカットファイルがある場合の動作確認はした方がいいぞ
1012:デフォルトの名無しさん
25/06/09 08:19:56.01 EHQrQQev.net
シンボリックリンクとジャンクションとハードリンクも動作確認した方がいいぞ
パスが255文字超えた場合も動作確認した方がいいぞ
1013:デフォルトの名無しさん
25/06/10 20:52:05.68 RKOrDLCJ.net
VBAのfor eachやfor nextでif文を使用して条件に合わなかった時にnext するにはどうしたらいいでしょうか?
1014:デフォルトの名無しさん
25/06/10 21:05:38.20 94f6xD2K.net
forの中をDo-Loopで囲んで脱出したい時はExit Doする
1015:デフォルトの名無しさん
25/06/10 21:05:45.22 zK5HBYNC.net
>>992
VBAでFor EachやFor Nextループ中に条件に合わない場合に次のループに進むには、If文を使い、条件が合致した場合のみ処理を記述します。
' For Each の例
For Each item In collection
If 条件 Then
' 条件に合った場合の処理をここに書く
End If
Next item
' For Next の例
For i = 1 To 10
If 条件 Then
' 条件に合った場合の処理をここに書く
End If
Next i
Elseブロックを記述しないことで、条件が合わない場合は自動的に次のループへ進みます。
1016:デフォルトの名無しさん
25/06/10 21:17:29.25 KLsW+s5l.net
next の手前にgoto
1017:デフォルトの名無しさん
25/06/10 21:35:49.89 chtn5cci.net
gotoでnext前のラベルに飛ぶ。ラベルは
CONTINUE_1:
など
1018:897
25/06/10 21:41:20.79 4RtejL7X.net
C言語の呪いから解けずにGoTo使いにくい俺
1019:デフォルトの名無しさん
25/06/10 21:55:14.34 qJv58WHL.net
無理して使うもんじゃない
そもそもifで処理せずにnextさせたいなら、
逆にifで処理させれば条件に当てはまらなければnextになるんだし
1020:デフォルトの名無しさん
25/06/10 21:57:34.45 YNq6kTxr.net
馬鹿ばっかで呆れるスレ
1021:デフォルトの名無しさん
25/06/10 21:58:07.04 YNq6kTxr.net
馬鹿ばっか
1022:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 137日 18時間 26分 52秒
1023:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています