1 名前:デフォルトの名無しさん [2017/11/08(水) 11:26:30.13 ID:+KUB1/9hd.net] スレ立ての際は一行目に !extend:checked:vvvvv:1000:512 と入れてスレ立てして下さい ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※関連スレ VBAなんでも質問スレ Part2 mevius.2ch.net/test/read.cgi/tech/1432173164/ Access VBA 質問スレ Part1 mevius.2ch.net/test/read.cgi/tech/1328536426/ Excel総合相談所 126 https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/ ※前スレ Excel VBA 質問スレ Part50 mevius.2ch.net/test/read.cgi/tech/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
330 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 11:18:12.75 ID:U0ESQ6dD0.net] おいおい急に条件増やすなよw www.tschoolbank.com/excel/validation-list-linkage/ こういうことじゃないのかよ
331 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 11:24:14.71 ID:pXIsIngK0.net] >>322 これの話だから知らないなら絡んでくるなよ mevius.2ch.net/test/read.cgi/bsoft/1506938295/713
332 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 11:39:56.54 ID:JkBkmVnb0.net] >>314 違う。 そのコード書いた奴に向かって言ってるのと、躓いてる奴にはそのコードはよろしくないと言ってる。 何の例かは分からんが、もっと現実的なコードにすべきなんだぜ。
333 名前:デフォルトの名無しさん [2017/12/03(日) 12:12:17.46 ID:HLUSF6su0.net] >>322 しかも、わかりにくいかもしれないけど条件ちゃんと書いてあるんだけどね 入力規則の絞り込み検索じゃない。 階層ごとにクリック選択する事すらめんどくさいと言ってるんだよ。 一度の選択でリストの階層移動ができるかどうかを質問主は相談所で聞いていて 自分はVBAないとだめだよと回答したけどVBAだとどうなんだろうとこっち で聞きなおしてみたんだけど、
334 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 12:58:31.51 ID:A600L+iiM.net] >>325 さすがにそれは読み取れん
335 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 13:12:35.66 ID:bN8T4SKTM.net] >>323 こういう糞レスがつくからスレが過疎るんだぞ
336 名前:デフォルトの名無しさん [2017/12/03(日) 13:54:27.80 ID:HLUSF6su0.net] ちゃんと、VBAでリストの絞り込みって一度で出来る? こう書いて その下に 多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって こう書いてあるんだけど読み取れない? しかも、前文にエクセル相談所にあった質問こうも書いてあるし。 で、わざわざVBAで聞いてるのにわからないかー
337 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 15:23:42.34 ID:icSWQcwl0.net] 具体的なコードが伴わない場合は外野がなんかゴチャゴチャ言っている程度に聞き流すべき。 >>323 の質問はウィンドウズ標準のメニューバーみたいな形を想定しているみたいなので、 外部参照にMicrosoft Toolbarとかあれば、それを追加して解決するんじゃないかな。
338 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 15:57:02.43 ID:pXIsIngK0.net] >>328 > 多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって マウス操作にはクリックも含むのが普通だと思うぞ >>327 無駄なレスしてなにか楽しいのか? >>329 あっちのスレ読めばわかるけどそもそも VBA 使わずにできるかどうかの問題になってるから Toolbar 云々の話ですらない お前さんこそ聞き流すべき
339 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 16:12:49.11 ID:icSWQcwl0.net] >>330 どちらかというと>>315 の質問に答えた形だけど。 向こうの質問にこっちで答える義理もないし。
340 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 17:11:02.86 ID:JkBkmVnb0.net] >>315 それは、VBAでも出来ないと思う。 というかWindowsの標準動作と違う。 似たようなのは出来るかもしれないけど。 コンボボックスじゃなくメニューなら出来るかな。 見ためが違うけど。 見ためをコンボボックスにしたいならコンボボックス使わずにフォ−ムに描画した方が楽じゃね? コンボボックスだと選択しないとイベント発生させるのが難しいし、イベント発生時にブルダウンが閉じるのが通常動作だから。 サブクラスでHITTEST検出で出来るかどうか。 VBAではウルトラC級に難しい。
341 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 17:13:47.51 ID:JkBkmVnb0.net] >>329 メニューバーの見ためは駄目なんじゃないの? 俺もメニューバーが現実的だとは思うけど。
342 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 18:36:56.64 ID:RpLqv7Ag0.net] >>315 階層付きMenuで3項同時に入力するってこと? 自分だったらContextMenuの改造またはPopupでやるかな。 見た目悪いけど、最下層をデリミタ区切りのフルセットにすれば Splitして投げ込むだけでいいでしょ? CellのContextMenuだとあとで標準に戻すこと考えないと いけないので最近はもっぱらPopupばかり使ってる。 Cellのプルダウンだと表示数に限りがあるけど、Popupだと 画面サイズいっぱいまでいけるし、、 あ、もちろんCommandBarsのアレのことです。
343 名前:デフォルトの名無しさん [2017/12/03(日) 22:48:18.35 ID:DUCKYmEka.net] >>315 いえ、1つ目のリストを表示して、マウスの位置をその位置まで持ってきて 2つ目のリストを表示してって3つ目のリストを最終的に表示するみたいな。 エクセルの旧表示みたいな感じで、ファイル→検索みたいな感じです。 多分
344 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 00:43:15.26 ID:oPXdl+lm0.net] >>335 いやだからそれって、階層メニューのことでしょ? 手近なところでいうと、、、たとえばFireFoxだと、 表示 > テキストエンコーディング > 自動判別 > 日本語 みたいな。この手のMenuって、onMouseOverイベントで 下層が勝手に開いていきますよね。 それで各階層の選択肢を全部入力値として使うことじゃないの?
345 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 02:58:02.92 ID:Fxj9yJGL0.net] そう、これはメニューの動作なんだ。 コンボボックスで実現するのはとても難しい。 ほとんどの奴は上級者でも不可能と言うだろう。 それとも俺の知らない何かがあるかもしれないけど。
346 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 03:21:07.64 ID:oPXdl+lm0.net] コンボの配下にメニュー作ろうとすると怒られた。 階層メニューによる一括入力、自分でも使うかもと思い作ってみたよ。 1) 前提:質問者のリンク先キャプチャを参考 A2:C2が回答入力欄 キャプチャにある凡例を登録するための矩形範囲を"R_Master"とする。 2)呼出部:キャプチャのA1セルにある "商品"の文字列を右クリックで発動。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Resize(1, 1).Value = "商品" Then Cancel = True Call Popup_FullPut(Range("R_Master"), " 個") End If End Sub
347 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 03:23:18.02 ID:oPXdl+lm0.net] 3)Menu生成部 Sub Popup_FullPut(rngMst As Range, Optional strUnit As String) Dim r As Range Dim i As Long, j As Long, k As Long With CommandBars.Add(Position:=msoBarPopup) For i = 0 To rngMst.Rows.Count - 1 Set r = rngMst.Offset(0, 0).Resize(1, 1).Offset(i, 0) If r.Value = "" Then Exit For With .Controls.Add(msoControlPopup) .Caption = r.Value For j = 0 To rngMst.Rows.Count - 1 Set r = rngMst.Offset(0, 1).Resize(1, 1).Offset(j, 0) If r.Value = "" Then Exit For With .Controls.Add(msoControlPopup) .Caption = r.Value For k = 0 To rngMst.Rows.Count - 1 Set r = rngMst.Offset(0, 2).Resize(1, 1).Offset(k, 0) If r.Value = "" Then Exit For With .Controls.Add(msoControlButton) .Caption = r.Value & strUnit .OnAction = MkAction( "Popup_Input", rngMst.Address(external:=True),i & "|" & j & "|" & k ) End With Next End With Next End With Next .ShowPopup .Delete End With End Sub
348 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 03:24:02.05 ID:oPXdl+lm0.net] 4)入力実行部 Sub Popup_Input(strMst As String, strAns As String) Dim rngR1 As Range: Set rngR1 = Range("A2") Dim rngR2 As Range: Set rngR2 = Range("B2") Dim rngR3 As Range: Set rngR3 = Range("C2") Dim rngMst As Range: Set rngMst = Range(strMst) Dim i As Long, j As Long, k As Long i = Split(strAns, "|")(0) j = Split(strAns, "|")(1) k = Split(strAns, "|")(2) rngR1.Value = rngMst(i + 1, 1).Value rngR2.Value = rngMst(j + 1, 2).Value rngR3.Value = rngMst(k + 1, 3).Value End Sub
349 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 03:28:37.65 ID:oPXdl+lm0.net] 5)引数付きのOnActionコマンドの生成に普段使っている関数 ん?書き込めない、、なんで? 要は文字列生成がメンドーだから関数使ってるだけなんだけど、、
350 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 03:36:14.51 ID:oPXdl+lm0.net] 刻んでみる。 5)引数付きのOnActionコマンドの生成に普段使っている関数 Function MkAction( strCMD
351 名前: As String, Optional arg1 As String, Optional arg2 As String ) [] [ここ壊れてます]
352 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 03:41:24.99 ID:oPXdl+lm0.net] Dim文のところではじかれるみたい、、 5)引数付きのOnActionコマンドの生成に普段使っている関数 Function MkAction( strCMD As String, Optional arg1 As String, Optional arg2 As String ) Dim DQ As String: DQ = Chr(34) Dim SQ As String: SQ = Chr(39) Dim buf As String buf = strCMD & " " If arg1 <> "" Then buf = buf & DQ & arg1 & DQ If arg2 <> "" Then buf = buf & "," & DQ & arg2 & DQ MkAction = SQ & buf & SQ End Function 書き込めたかな? Chr関数は禁則?
353 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 03:44:57.18 ID:oPXdl+lm0.net] 書き込めた。 Chr関数で引っかかっていたみたい。実際は半角です。 インデントは全角スペースになっているので変換が必要です。
354 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 07:27:39.63 ID:65GoxPZl0.net] VBEにコピペすると、全角スペースは自動的に半角スペースに変換されるから意識する必要ない
355 名前:デフォルトの名無しさん mailto:sage [2017/12/04(月) 07:55:50.52 ID:oPXdl+lm0.net] >>345 本当ですね。 tnx!
356 名前:デフォルトの名無しさん mailto:sage [2017/12/05(火) 20:57:29.50 ID:dwGLun0F0.net] エクセルのVBAで、サーバー上にディレクトリを作成して、そこにファイルを移動させたいのですが、 MkDIRで作成できませんでした。どうすればよいでしょうか?
357 名前:デフォルトの名無しさん mailto:sage [2017/12/05(火) 21:25:35.80 ID:JPkeWfWn0.net] >>347 FileSystemObject使えばできますよ。 サーバー側の権限は大丈夫ですか?
358 名前:デフォルトの名無しさん mailto:sage [2017/12/05(火) 21:34:50.27 ID:dwGLun0F0.net] >>348 ありがとうございます! dim myFSO as new filesystemobject myFSO.CreateFolder (サーバー上のつくるディレクトリ名)でいけますか? それともカレントドライブをサーバー上に移動すべきでしょうか?
359 名前:デフォルトの名無しさん mailto:sage [2017/12/06(水) 00:43:40.01 ID:D6s1mPo40.net] >>349 試してみたら?
360 名前:デフォルトの名無しさん mailto:sage [2017/12/06(水) 11:15:00.00 ID:8dpxpCOD0.net] 質問です。 プロシージャの処理の途中でイミディエイトウィンドウをうまくクリアする方法はありますか?
361 名前:デフォルトの名無しさん mailto:sage [2017/12/06(水) 11:39:53.74 ID:MQk7+ulPa.net] あるかないかでいえば、 ないこともないアル 地道にセンドキーでキー送って 全選択してデリートしてって方法がな
362 名前:デフォルトの名無しさん [2017/12/06(水) 11:46:45.28 ID:vAzWmOhld.net] 関係ないけどブックを開くとイミディエイトウィンドウ上の変数が消滅するの困る
363 名前:デフォルトの名無しさん mailto:sage [2017/12/06(水) 13:39:40.38 ID:yYTt94fN0.net] >>352 その際はFocusをVBEに移してイミディエイトPaneをアクティブにする操作を挟むのでしょうか?
364 名前:デフォルトの名無しさん mailto:sage [2017/12/06(水) 16:07:50.81 ID:ykbUk5IV0.net] エクセルのVBAで競馬予想ソフト作っている人っていますか?
365 名前:デフォルトの名無しさん mailto:sage [2017/12/06(水) 19:37:25.77 ID:sdGXOm2ja.net] >>354 デバッグ クリア VBAで検索したら 幸せになれるかもよ
366 名前:デフォルトの名無しさん mailto:sage [2017/12/06(水) 21:02:08.65 ID:H8Zs2M1B0.net] VBAでコンボボックスのリストのみクリアってどうやってやるんですか?
367 名前:デフォルトの名無しさん mailto:sage [2017/12/06(水) 23:12:55.48 ID:ClwZMpdPa.net] >>357 正式にやるのは多分すごく難しい。 Win32APIでコンボボックス内のリストボックスに対してどうにかするということになると思う。 しかし、単純に strCombo=ComboBox1.Text ComboBox1.Clear ComboBox1.Text=strCombo でテキストが一瞬クリアされたのは見えないから現実的な案だと思う。
368 名前:デフォルトの名無しさん [2017/12/07(木) 10:43:49.53 ID:cGZzJnMw0.net] シートの非表示設定について Sheets(”sheet1").Visible = False でシート非表示設定をしたのですが元々非表示だとバグになってしまいます。 釦を押せば特定のシートのみを表示できるようにしたいんですけど表示時非表示時がランダムで 非表示時でもそのコード無視するかと思ったら非表示なのに非表示にするんじゃねぇと怒られた。
369 名前:デフォルトの名無しさん mailto:sage [2017/12/07(木) 10:55:46.75 ID:SgQPpSGG0.net] >>359 VisibleプロパティがBooleanで状態を返すのでIfで分岐させる If Sheets("sheet1").Visible Then Sheets("sheet1").Visible = False Else Sheets("sheet1").Visible = True End If こうすると実行するたびに表示/非表示が切り替えられる
370 名前:デフォルトの名無しさん [2017/12/07(木) 11:24:06.29 ID:cGZzJnMw0.net] >>35 8 ありがとうございます。できました。 なんとなく、if文使うのかなと思ったのですがif文が思いつかなかった。 Elseの下を消すことで、非表示時は非表示のままのする思い通りの事が出来ました。
371 名前:デフォルトの名無しさん mailto:sage [2017/12/07(木) 11:50:17.69 ID:/U/N3RBoa.net] >>360 それだと非表示の時は表示されるからElseはいらねえだろ。 俺も Sheets("sheet1").Visible=(Not Sheets("sheet1").Visible) と最初考えたけどやっぱIf文にしないと駄目かと考えた。
372 名前:デフォルトの名無しさん mailto:sage [2017/12/07(木) 12:06:28.65 ID:SgQPpSGG0.net] >>361 たぶん他人にも使わせるのだと思いますが シートをシート名じゃなくオブジェクト名で指定すると 誰かが勝手にシート名を変えても関係ないのでオススメ。 さらにわかりやすいオブジェクト名に書き換えると、尚良し。 オブジェクト名はVBEのプロパティウィンドウの(オブジェクト名)を見てね。 初期値はSheet1なので Sheets("sheet1")をSheet1に置き換えてもうごくはず。 >>362 あとから余計なこと書いたかなーと思ったけど、本人が気づいてくれてよかった。
373 名前:デフォルトの名無しさん [2017/12/07(木) 13:06:30.92 ID:cGZzJnMw0.net] 〉〉361 ど素人で何もわからないままマクロの記述させながら必要なところ コピペしてとネットコピペでほとんどコード打ち込まず作ってるので まだ、オブジェクトまで触ってません。 今度触ってみたいと思います。 標準モジュールは逆になんのモジュールかわからなくなるの必要なモジュールと区別するために名前つけてるけど sheet名はそのままです。
374 名前:デフォルトの名無しさん mailto:sage [2017/12/07(木) 21:42:15.17 ID:F/BnOZfeM.net] >>287 ワシはティンコを2本もっている 2本目はとっておきだ(´・ω・`)b
375 名前:デフォルトの名無しさん [2017/12/07(木) 22:24:29.94 ID:QxT2u2P9d.net] >>365 マジ気になるわー V字になってるのか、真ん中で2段になってんのか、前後に生えてんのか? 1本は普通だが、もう1本はデコに生えてんのか?
376 名前:デフォルトの名無しさん [2017/12/08(金) 00:07:26.11 ID:8mEkhztWa.net] コードのコメントについて どこまで記入してますか? 素人なもんで変数の内容から 変更前のコードまでコメント化してるからコード自体が長くなる。 社内のVBAコード見るとコメントほとんど書いてなくてf8で追っても、よくわからないからなにがいいか分からない
377 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 00:27:27.18 ID:tPe4A27O0.net] 設計さえキチンとしていれば大抵はコメント要らない。 Dim SLine As Long:SLine = 3 '読み込むファイルのヘッダーが二行ある為 みたいにプログラム依存でないパラメータを解説する時に使ったりはする。 ある程度の習熟が必要なので、ステップ実行でも何してるか分からない(正常に追えない原因が分からない)のであれば、 まだコメントの必要性について論ずる段階では無いので特に要らないんじゃないかな。 自分の昔書いたコードを改修しようとして訳分からないみたいなのを何度も経験して始めてコメントの要点が掴めると思う。
378 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 00:40:24.89 ID:MH/bn/0fH.net] >>367 変数名からなるべく中身を類推できるようにつけてコメは最小限にしてる。 後で迷うくらいならつけたほうがいいと思う。コード記述して直後は完全にわかってるから迷うポイントに気づけない。一週間後とかに再レビューして、「コレなにやってんだろ?」と引っかかった所はポイントかな。 あとExcel本体の不具合、制限回避とかコメしてないと中々思い出せないことがある。
379 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 00:50:05.27 ID:04xg1k3G0.net] コメントは書いた方が良いんだが、余計なのはいらない。 変数名で分かるものは必要ない。 むしろどういう処理かのコメントを書く場合が多い。 それもそこのメンバーのレベルによる。 書ける奴らが集まってるなら、こんなもん分かるだろと書かない場合も多い。
380 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 08:12:21.44 ID:WX0K1LcLa.net] コメントは処理の内容についてはしない なぜその処理をするのかつかみにくいとリッキーだったり使用上やむを得ないときに理由を簡潔に書く 変更履歴をコード上に書くのは愚の骨頂だけどVBAだとほかに方法が少ないから自分かチームでルール決めるしかないな
381 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 08:13:11.00 ID:WX0K1LcLa.net] とリッキー→トリッキー 使用→仕様
382 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 18:16:29.95 ID:3k7CQU1Hd.net] 質問です。 シミュレータソフトをVBAを使って制御しています。順々にモデルを解析していき、逐次計算結果がエクセルに反映表示されるような動作をします。 ただそのとき、きちんと逐次結果が表示されていく場合と画面に全く結果が表示されずプログラムが終わった途端に一気に数値が表示される場合とがあります。 途中でも解析結果が分かるよう安定して逐次表示するようにしたいのですが解決策分かる方いたら教えてください。 なお画面更新はもちろんオンです。調べたところdo eventsというのでWindowsに制御を渡すやり方もあるようですが、途中の動作が割り込む可能性がありそれは避けたいです。
383 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 19:13:35.05 ID:jJUgyerEM.net] 自分も普段はほとんどコメント書かない。 適切な命名とコードの流れで処理は説明して、意図や補足説明にコメントを書くのが正しいと思ってる。 ただ、VBAではかなり細かく書いてる。理由は、VBAの時点でどうやっても読みづらいから。 勝手に行間調整するせいで int n WorkBook book みたいな整列ができないし、Dim n As Integerって構文自体が無駄な単語多くて、数並んでいると読む気がなくなる。 スコープの区切りにEndを使うのも()よりコードに埋もれて見づらいしVBEの色設定は貧弱だし。 VBAに限ってはコメントで処理追った方が楽だって最近は思ってる。 早くエクセル操作に向いたもっとまともな言語出ないかな。
384 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 19:16:35.83 ID:wpv6YuQca.net] そうか、ここもvba方式なんだった。 int__________a WorkBook___book みたいにタイプと変数名で表っぽく配置することね。
385 名前:デフォルトの名無しさん mailto:sage [2017/12/08(金) 19:34:22.58 ID:tPe4A27O0.net] >>374 VBAは宣言しないのがデフォなんだから、いちいちDimなんちゃらってやってたら、そりゃ不便だろ。
386 名前:デフォルトの名無しさん [2017/12/08(金) 20:15:19.13 ID:F+K0Jtko0.net] >>376 そうではなくて、変数の宣言構文がシンプルではないところを言っていると思うよ。
387 名前:デフォルトの名無しさん [2017/12/08(金) 20:45:47.90 ID:kuqPkTCcd.net] やれやれ、また長い関数を書いてしまった
388 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 01:25:45.78 ID:naguWC2La.net] 宣言しない奴のコードは読みたくないな。 宣言全部入れてから持って来いと言うかも。
389 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 01:27:01.02 ID:vu3Y0INla.net] >>375 VBAに慣れてれば、そんなの違和感無いけどな。
390 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 01:39:08.64 ID:vu3Y0INla.net] >>373 それじゃコメントのしようがない。 どんな風に制御しているのかとか、結果はそのシュミレータソフトから取ってきてるんだろうけど、そこから逐次結果が得られてるのかとかの詳細が分からんと何とも言えない。
391 名前:デフォルトの名無しさん [2017/12/09(土) 11:52:36.39 ID:oQ1pndO0d.net] Debug.Print もApplication.Statusbar もちょっと処理が重くなってくると表示が止まって役に立たない
392 名前:デフォルトの名無しさん mailto:sage [2017/12/09(土) 13:26:29.70 ID:Px3+LsGd0.net] >>382 Debug.Printの次にDoEventsを書けばすぐに出力される
393 名前:デフォルトの名無しさん [2017/12/09(土) 20:32:20.11 ID:uW7BpcjHa.net] コメント関連ありがとう。 もう、人には見せない用だけどくどいくらいコメント書きまくってるw
394 名前:デフォルトの名無しさん [2017/12/10(日) 08:18:11.50 ID:PzHPENwqa.net] VBAの開発環境について デバッグ作業してると2画面欲しくなるんだけど皆さんどうしてる? vBEの画面と通常の画面をフルスクリーンで見たいし、VBEもコード書き込む画面のほかに現在の変数が分かる画面と実行結果が分かる画面が欲しいからノート1台でやってると画面グチャグチャ
395 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 08:41:31.53 ID:2VZ9i3vi0.net] ノートはUPS付きのデスクトップとして使ってる 24インチのモニタに繋いで 無線キーボードとマウスで操作
396 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 09:29:22.82 ID:s+zBVK9X0.net] モニタ2枚でやってるけど ツールボックスのウィンドウとかフォームが画面の境界に表示されたりして 地味に対応していない感を醸し出してる。 フルHD以上なら1枚でもVBEを端っこによけておけば窮屈じゃないと思う。 それよりエディタの貧弱ぶりをどうにかしてほしい。 今時のIDEを触ると、VBEはふた昔前のオマケ機能なんだなと思い知る。
397 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 12:22:00.56 ID:w7IPLNC5r.net] まあデバッグが必要になる様なマクロなんかこさえんなっで事だ
398 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 13:02:23.44 ID:rJurKCVR0.net] デバグが不要なマクロって相当短くないと無理だろ
399 名前:デフォルトの名無しさん [2017/12/10(日) 19:23:33.18 ID:RKQe6ZfS0.net] バグ発生に関与する要因としてコードの量のみを気にかけている → 初心者またはそれに準ずる低スキルのもち主 >>388 を受けてバグが一切発生しない事を想定している → 0か100でしか物事を考えられないアスペ デバッグをデバグと言っている → ガチのジジイか極端にセンスの悪い意識高い系 たった一言でここまでプロファイリング出来ました
400 名前:デフォルトの名無しさん [2017/12/10(日) 20:54:53.56 ID:DUp9AezHa.net] え??コード書き書きしたら一度も動作チェックしないで実装するの? すげー! ほぼ途中で止まって黄色くなる身としては信じられない. 全ての動作の確認と変数の動作に変な所がないか見るの楽しい. それに人が書いたコードで動作チェックするにもf8必要だし ただ、F8連打も大変だから超ゆっくり動作する機能でもあればいいのに
401 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 21:56:00.33 ID:tyDER63C0.net] 虫見付けるたんびに「バッグだ!バッグだ!」言うんか 自分の発言に違和感無いんか
402 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 22:02:23.86 ID:UfhTQ4hV0.net] プログラムがおかしい以上バグはバグだ 開発中に個人で見つけてるから影響が小さいというに過ぎないが べつにいいじゃんバグでも
403 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 22:28:29.51 ID:rJurKCVR0.net] リリース版を出すかどうかをデバグ作業と呼ぶかどうかの境界線にしてるって事なのかな? バグまみれでリリースして、ネット経由でパッチを当てるのが当たり前になった事が原因で、 そういう感覚が生まれたって考えるとなかなか興味深い現象だな。
404 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 22:54:03.35 ID:5raOMeRU0.net] お前、リアルで嫌われ者だろ たった一文でここまでプロファイリング出来ました
405 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 23:42:33.59 ID:05lOR9eq0.net] 質問です。(スレチかもだけど、他よりここの人たちのほうがLevel高そうなので) Excel2013 @Win10 64bit Core i7 Mem8GB ここ数日でAutoFilterのパフォーマンスが急に悪くなったと感じています。 テーブルは2000行*50列程度。 症状としてはフィルタリング済みのシートをSelectする際にタイムラグが発生します。 最初原因が分からなかったのですが、設計を少しずつ切り落としていった結果、 フィルタ範囲に入力規則が設定されていたのが原因でした。 その内容はIMEOffのみ。 フィルタがかかってない場合は瞬時にシート切替できるのに、フィルタリングされていると 切替に数秒待たされます。 フィルタ列が増えるとラグが倍増します。 また、列要素の先頭行付近の要素でフィルタされている場合の方が影響が大きいです。 2〜3日前までこのようなことはなかったのに、、何かExcel環境自体がかわったのかと 思いくまなく調べるのですが、原因が掴めません。 (つづく)
406 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 23:43:42.33 ID:05lOR9eq0.net] >>396 (つづき) マクロやシート上の把握できていない設計要素の影響を除外するために新規xlsxファイル で試しました。 前提:評価ブック以外のブックは開かない。 シート1:2000行*50列の表を作成、A-Zの1文字をランダムに埋め、AutoFilter設置。 書式設定、条件付き書式等は一切行わない。 入力規則は評価条件とする。(IME制御なしの場合とIME-Offの場合) フィルタ実施時は、2列絞り込む。 シート2:空シート 評価用Macro(シート1) Option Explicit Dim st As Single, ed As Single Private Sub Worksheet_Deactivate() st = Timer End Sub Private Sub Worksheet_Activate() ed = Timer: Debug.Print ed - st End Sub (つづく)
407 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 23:44:00.59 ID:05lOR9eq0.net] >>396 (つづき) 評価方法: 1)フィルタ設置のシート1を表示 2)Ctrlキーを押しながら、PgDn→PgUpを連続して押下。 3)Immediateウィンドウで計測時間を確認。 上記を5回程度実施 条件と結果: Case IME制御なし+フィルタなし ▼平均時間:約70msec Case IME制御なし+フィルタ-On ▼平均時間:約70msec Case IME-Off+フィルタなし ▼平均時間:約70msec Case IME-Off+フィルタ-On ▼平均時間:約7000msec ちなみに1列フィルタリングした場合は、約1400msec程度でした。 対症療法としては「入力規則使うな」となりそうですが、2〜3日前までは上記 現象は発生していなかったので、、原因療法が知りたいです。 どなたか上記現象分かるかたいらっしゃいませんか?
408 名前:デフォルトの名無しさん mailto:sage [2017/12/10(日) 23:47:36.15 ID:VPQqZskd0.net] >>398 思い当たるのは、FCUでIMEの挙動がおかしくなったという報告多数な件
409 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 03:47:36.99 ID:/hRyHJmR0.net] >>399 Version1703なのでまだFallは当たってないようです。
410 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 11:20:26.75 ID:TIu41blJ0.net] ホントMSはアップデートなのかウイルスなのか分からんことするよな・・・
411 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 13:06:28.39 ID:NoGJiqM0H.net] >>401 ちなみに職場の環境 Excel2010 @Win7 Excel2013 @Win8 では再現しませんでした。 やっぱりなんらかのUpdateが当たったのか、それとも自分でなんかやらかしてるのか、、、
412 名前:デフォルトの名無しさん mailto:sage [2017/12/11(月) 13:32:28.01 ID:pEROMoD00.net] 午前中にメッセージが出てアプデするか? とか聞きゃあがったから「あいよ」ってんで気軽に再起動した 90%ぐらい完了した後で Cannot だってやんの しょーもないから電源落として午後
413 名前:再起動したら また「アプデするか?」 って もうね、アホかと [] [ここ壊れてます]
414 名前:デフォルトの名無しさん mailto:sage [2017/12/12(火) 01:03:48.16 ID:vtwEo9S/0.net] Windows 押しつけがましいアップデートメッセージが出て いいえしまくってたんだけど ちょっと目を離して風呂入ってたら勝手に合意したことにしてOSインストールされてた そんな俺が客先で作らされてるのは顧客が一日黙ってたら契約に合意したことになるシステム
415 名前:デフォルトの名無しさん mailto:sage [2017/12/12(火) 04:17:56.67 ID:VGkGFTOK0.net] 質問です。 LastCellって簡単に取得できるのにHomePositionってこれといった決定打がないんですかね? SendKeys以外で簡単に安定して取得する方法ってありますか? できればSelectしなくてよい方法で。
416 名前:デフォルトの名無しさん [2017/12/12(火) 11:56:45.28 ID:R9+tEHmjd.net] ADODB.Streamで大きめのテキストファイルを読むときLoadFromFileが重いので、Openの引数でファイル指定してから ReadTextするようにしたいんですがうまくいきません。 パスをそのまま書いても、"file://C:temp/data.txt"のような書き方をしてもことごとくOpenのところで落ちてしまいます。 どう書けばいいんでしょうか? ちなみに先頭100行を試し読みするときとかに使いたいです。
417 名前:名無し mailto:sage [2017/12/12(火) 12:18:28.61 ID:KlMiw57eM.net] >>406 それならコード貼ったほうが早い 使い方云々が知りたいだけならググればいいし
418 名前:デフォルトの名無しさん [2017/12/12(火) 12:50:26.86 ID:R9+tEHmjd.net] >>407 スマホなのでちょっと待ってて
419 名前:デフォルトの名無しさん mailto:sage [2017/12/13(水) 11:40:21.94 ID:5F7kXiJk0.net] 名前を付けて保存する際 最近使った“アイテム”が 今週〜,先週〜,しばらく前,という順番で使用履歴の各ファイル名が表示されます。 これを表示させない設定を教えてください。 よろしくお願いいたします。 スペック ↓ OS=Win10 Excel2016 Officeバージョン=1710
420 名前:デフォルトの名無しさん mailto:407 [2017/12/13(水) 14:40:49.78 ID:5F7kXiJk0.net] ↑すいません、質問するべき板を間違えました。ここはVBAでしたね。 他で聞いてみます。
421 名前:デフォルトの名無しさん mailto:sage [2017/12/13(水) 22:03:05.49 ID:lbNGI0B20.net] チョイ前に変数の宣言が話題になってたから俺も一ネタ言いたい 「redim で変数の宣言が出来る仕様はやめて欲しい」 変数名を間違えた時にエラーで気付けるように普段から変数の宣言を強制してるんだけど、 redim で配列を変更する時に変数名を間違えても 新たな別の変数扱いされてエラーにならないから気付かないことがある 配列変数でも宣言は dim 、要素変更は redim っていう風にしといてくれたらと願ってやまない
422 名前:デフォルトの名無しさん [2017/12/13(水) 23:22:51.89 ID:b+I23nON0.net] Application.GetOpenFilename でファイルのパスを求められることが分かった Application.GetOpenFilename Workbooks.Open.Filename:=Application.GetOpenFilename ってできないことが意味がわらない あと Workbooks(Application.GetOpenFilename)ってやるとパス付のでエラーになってしまうこともわかった Workbookオブジェクトに適当な変数を宣言して iとする i = Application.GetOpenFilename i.worksheet()ってできない意味がわからない i = Workbooks.Open(filename:= ApplicationGetOpenFilename) i.worksheets() これならできる意味がわからない ()で戻り値をくくるのはわかる でもこの場合の戻り値はパス付戻り値であるから Applcation.GetOpen.... はいらないのでは?パス付戻り値ならば i = Application.GetOpenFilename でもできるのでは?WorkBookオブジェクト変数だから 誰か答えられる?
423 名前:デフォルトの名無しさん mailto:sage [2017/12/13(水) 23:34:03.63 ID:fRI8/I3E0.net] そういう言語仕様なので
424 名前:デフォルトの名無しさん [2017/12/13(水) 23:49:56.82 ID:b+I23nON0.net] わりと真面目に答えてくれ オブジェクト変数に直接パス付のファイル名をぶち込んでエラーになるのが意味わからない なんのためのオブジェクト変数なんだ Workbooks.Open(filename:= ApplicationGetOpenFilename) これもパス付のファイル名なのになんで格納できるんだ?
425 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:01:33.96 ID:iqnmwrCv0.net] まず型というものを理解してください つぎに、プロパティというものを理解してください つぎに、オブジェクトにはデフォルトプロパティというものがあるのを理解してください あと名前付き引数に対する理解も必要ですね VBAではSetでの代入とLet(を省略した)代入では意味が違うので、それもちゃんと区別してください いちいち全部ここで解説はせんが このぐらい理解すればたぶん答えはわかるだろ
426 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:13:48.84 ID:iqnmwrCv0.net] まじめに答えといてやるけど >オブジェクト変数に直接パス付のファイル名をぶち込んでエラーになるのが意味わからない たぶんお前がやってるのは、そのオブジェクト変数のデフォルトプロパティに代入しようとした で、そのオブジェクトがそれを受け入れないからエラーがでたんだろうな >Workbooks.Open(filename:= ApplicationGetOpenFilename) >これもパス付のファイル名なのになんで格納できるんだ? 格納の意味が分からん ApplicationGetOpenFilename(の結果)をたんにOpenの(filename)引数として渡してるだけ ApplicationGetOpenFilenameの結果がOpenのfilename引数として適当だからエラーが出なかっただけ
427 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:14:33.99 ID:FrwGQASIx.net] パス付戻り値っていう表現が凄い Application.GetOpenFilenameの戻り値は、パス文字列か、パス文字列の配列か、ダイアログがキャンセルされたときに返されるFalseかのいずれかしかない パス付って、何にパスがくっついてると理解してるんだろう パスが戻り値そのものだろう
428 名前:デフォルトの名無しさん [2017/12/14(木) 00:18:35.88 ID:oVDd8Fug0.net] >>416 意味がわからん 初心者相手に専門用語で勝った気になるなよ
429 名前:デフォルトの名無しさん [2017/12/14(木) 00:21:23.88 ID:oVDd8Fug0.net] >>417 パスってのは ¥C:のことだろ? openメゾットの戻り値も¥C:ついてるのに WBオブジェクト変数に格納できる意味がわからない 専門用語でこたえるな わかりやすく答えろ 外人相手に口喧嘩して勝ち誇ってるやつと同じだわ
430 名前:デフォルトの名無しさん [2017/12/14(木) 00:23:38.19 ID:oVDd8Fug0.net] workbookのオブジェクト変数のデフォルトプロパティってなんだよ そこを答えろ 答えろって言わないと答え出て来ねえのかよ
431 名前:デフォルトの名無しさん [2017/12/14(木) 00:24:22.55 ID:oVDd8Fug0.net] ちなみにおれはVBA初めて3時間 ここまでの疑問が出るだけすごいと思うけど
432 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:24:26.11 ID:0XKK4N9O0.net] >>412 >Workbooks.Open.Filename:=Application.GetOpenFilename >ってできないことが意味がわ「か」らない Workbooks.Open Filename:=Application.GetOpenFilename なら動くんだが、それではダメ?(open と filename の間は半角スペース) 何故かと言えば言語の仕様として 引数はピリオドで繋ぐものではないからとしか言いようがない (workbooks はオブジェクト、open はメソッド、filename:=~ はその引数) >i = Application.GetOpenFilename >i.worksheet「s」()ってできない意味がわからない 変数i が workbook型だとして、Application.GetOpenFilename の戻り値はworkbook型ではない。 戻り値はvariant型なんだけど、キャンセル時に false になるだけで、ファイルが選択されていれば文字列が返される 複数ファイルが選択されてても文字列が配列で帰るだけ それに、i がworkbook型変数なので set を付けないとダメ i が variant型変数 なら文字列か false が帰るだけでヤッパリ workbook としての挙動はしない i.worksheet「s」() っていうのも、worksheetオブジェクトは 既に開いているブックのシートしか指定出来ないから、i がブックとしてオープンしてなきゃ当然ダメ >i = Workbooks.Open(filename:= ApplicationGetOpenFilename) >i.worksheets() >これならできる意味がわからない set i = Workbooks.Open(filename:= ApplicationGetOpenFilename) じゃないと動かないよ 理由は前述のとおり
433 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:32:01.43 ID:FrwGQASIx.net] >>419 Openメソッドの戻り値はパスではなく、Workbookオブジェクトそのものだ 開いているブックの集まりであるWorkbooksコレクションオブジェクトに、引数Filenameで指定したブックを追加して、戻り値としてそのブックそのものを返す処理だ 何か根本的に勘違いしてるだろ君
434 名前:デフォルトの名無しさん [2017/12/14(木) 00:33:36.37 ID:oVDd8Fug0.net] >>422 お前がまだわかりやすいな ただし おれはすでに開いているファイルじゃないと操作できないとかは全部知っている オブジェクト型変数の前にsetステートメントを置くことも知っている つまり Application.GetOpenfilename = ファイルを開いた時は文字列が返される workbook型に返せないのか? 答えはパス付きの文字列で帰って来るためにノーだ これも知ってる Workbooks.Open filename:=Application.GetOpenfilename これも知っている しかし結果としては ファイルを選択で開いたパス付き文字列を開く という命令なはず 同じパス付き文字列なのにworkbook型に格納できないのが意味がわからない
435 名前:デフォルトの名無しさん [2017/12/14(木) 00:35:42.03 ID:oVDd8Fug0.net] >>423 ん?なんで? msgboxで表示されてもパス付きになるよ?
436 名前:デフォルトの名無しさん [2017/12/14(木) 00:41:28.15 ID:oVDd8Fug0.net] またも意味不明な現象が起きた 拡張子を指定しなかったのに開いた 拡張子を指定したらなぜかエラーが出た なんでだ? https://i.imgur.com/lqUNtRU.jpg
437 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:42:52.81 ID:FrwGQASIx.net] >>420 オブジェクトには、特にプロパティ名を指定しないでアクセスする場合に、優先的に参照されるプロパティが決められていて、それをデフォルトプロパティと呼ぶ オブジェクト型に合わないデータを代入してしまう構文になっているときでも、データの型がデフォルトプロパティの型に適合していればVBAはデフォルトプロパティへの代入として解釈して処理を受け付ける
438 名前:デフォルトの名無しさん [2017/12/14(木) 00:44:33.92 ID:oVDd8Fug0.net] >>423 Workbooks.Open(filename:= ApplicationGetOpenFilename) →\C:〜〜〜〜という文字列が返される ApplicationGetOpenFilename →これも同じ なぜ前者はWorkbook変数に格納できて 後者はできないんだ?
439 名前:デフォルトの名無しさん [2017/12/14(木) 00:45:53.39 ID:oVDd8Fug0.net] >>427 そんなもん知ってるわ Rangeやcellsのvalueみたいなもんだろ? Workbookオブジェクトのデフォルトプロパティはなんだ?
440 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:48:20.20 ID:0XKK4N9O0.net] >>424 悪いけど>>412 の書き方じゃ分かってるようには見えない set を付けてない時点でこの人は分かってないんだなと判断されても仕方ない そして >Application.GetOpenfilename = ファイルを開いた時は文字列が返される も間違い Application.GetOpenfilename は、 あくまでもファイルのパス情報を文字列(或いは false)で返すだけで 実際にブックを開けることはしない だから正確に書くと Application.GetOpenfilename = ファイルを「選択した」時は文字列が返される というべきで、そのブックを開くためにworkbooks.open を用いる必要がある
441 名前:デフォルトの名無しさん [2017/12/14(木) 00:51:58.64 ID:oVDd8Fug0.net] >>430 set オブジェクト変数を代入するとこに扱うステートメント
442 名前:デフォルトの名無しさん [2017/12/14(木) 00:53:08.36 ID:oVDd8Fug0.net] >>430 ファイルを開いたっていうのは 選択したって意味なんだが オブジェクトとOPENメゾットで初めて開く こんなの知っている
443 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:53:19.64 ID:0XKK4N9O0.net] >>430 でもまだ不正確だった より正確に言うと Application.GetOpenfilename = 「開きたい(あるいは移動、コピー、改名、削除など何らかの操作をしたい)」ファイルを「選択した」時は文字列が返される ですね
444 名前:デフォルトの名無しさん [2017/12/14(木) 00:55:08.87 ID:oVDd8Fug0.net] >>433 んなもんしってるわ キャンセル押されたらフェイルス ファイルを選択したらパス文字列
445 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:56:13.50 ID:0XKK4N9O0.net] >>432 いや、それが分かってるなら何を問題にしてるのかがよく分からない それと「メゾット」じゃなくて「メソッド」ね
446 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:56:39.81 ID:pIjJ7/MG0.net] 真面目に答えるんじゃなくて わりと真面目に答えるように
447 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 00:58:18.78 ID:FrwGQASIx.net] >>420 ちなみにworkbookオブジェクトのデフォルトプロパティは存在しない 存在しないから当然、workbook型に合わないデータは代入できない
448 名前:デフォルトの名無しさん [2017/12/14(木) 01:00:54.08 ID:oVDd8Fug0.net] >>437 じゃあなんで workbook.openのパス文字列は入るんですかねえ
449 名前: [] [ここ壊れてます]
450 名前:デフォルトの名無しさん [2017/12/14(木) 01:01:13.61 ID:oVDd8Fug0.net] ここまで答えなしだが 誰もわからないのか?
451 名前:デフォルトの名無しさん [2017/12/14(木) 01:01:34.43 ID:oVDd8Fug0.net] おれの質問ってVBAの穴をついた?
452 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:04:09.93 ID:0XKK4N9O0.net] 質問の意味がわからないんですよね 何が疑問なのか、独自表現を用いずに、 set やなんかも省略せずに正しく動作するコードと 動作しない理由が知りたい動かないコードを書いてみてもらえます?
453 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:05:31.95 ID:FrwGQASIx.net] >>428 workbooksは、workbookクラスではない 別のオブジェクトのクラスだ それから、さっきも書いたが、Openメソッドの戻り値は引数で指定されたパスを持つWorkbookオブジェクトなのであって、Openメソッドによってパス自体が戻ってくる訳ではない パスを返してくるApplicationクラスのGetOpenFilenameメソッドとは全く働きが違う プロパティやクラスや引数の名前で何となくbookとかfileとか付けばパス付のWorkbookオブジェクトが返ってくるものと混同してるようだが、きちんと区別しないといけない
454 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:13:20.35 ID:FrwGQASIx.net] >>438 Openメソッドが要求する名前付き引数Filenameに、GetOpenFilenameで取得したパスを設定して、その結果新しく開いたWorkbookオブジェクトが返っているからだよ このFilenameはApplication.GetOpenFilenameメソッドの戻り値ではあるけど、Workbooks.Openメソッドの戻り値ではない Worksheets.Item(Index:=ActiveSheet.Name)みたいな処理と一緒だと言えば少しは分かるか?
455 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:13:59.17 ID:FrwGQASIx.net] >>440 突いてない 典型的な初心者の質問
456 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:17:18.86 ID:LaUulqGP0.net] 典型ではないな 低次元な初心者の質問
457 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:22:45.67 ID:FrwGQASIx.net] たぶんこの質問者は、コレクションを知らないタイプだな、 それから、式に含まれるプロパティ名やメソッド名をオブジェクトのクラス名と同一視しているタイプだろう
458 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 01:34:07.25 ID:n2gI2QxJ0.net] たぶんハイパーリンクでパスが表現される事が多いところから、 パスが文字列とは異なるデータ型を持つ何かだと勘違いしてるだけじゃないの?
459 名前:デフォルトの名無しさん [2017/12/14(木) 07:32:56.86 ID:oVDd8Fug0.net] >>443 workbooks.open filename:=Application.GetOpenfilename この場合はworkbooksオブジェクトに選択したパス文字列が格納されるのか? だからworkbook型に格納できるのか?
460 名前:デフォルトの名無しさん [2017/12/14(木) 07:37:06.65 ID:oVDd8Fug0.net] >>446 ん? workbooks worksheets rows これはコレクションだろ? コレクションはオブジェクトの最上位 プロパティはオブジェクトの何? メゾットはオブジェクトに命令 違うか?
461 名前:デフォルトの名無しさん [2017/12/14(木) 07:40:17.60 ID:oVDd8Fug0.net] マジでわかりやすい答えがない
462 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 08:30:04.65 ID:mohvOYX1x.net] >>448 君の言う「格納」は、コレクションへのオブジェクトインスタンスの追加、プロパティ値の設定、変数への代入、引数の受け渡し等がごちゃごちゃになっていると思う まず、Workbooksコレクションに、データの代入はできない WorkbooksコレクションはWorkbookオブジェクトの集まりを要素に持つコレクションオブジェクトだから それから、Workbooks.Open Filename:=Application.GetOpenFilenameという構文は、Workbook型の変数に値を代入しているわけではない Filenameという名前付きで定義されたOpenメソッドの文字列型の第一引数に値を渡していて、その結果としてOpenメソッドがWorkbookオブジェクトを返しているわけで、オブジェクト型変数への代入ではない
463 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 08:45:33.01 ID:YV9D93CW0.net] >>449 コレクションは最上位じゃない 一番上にあるのはオブジェクト
464 名前:デフォルトの名無しさん [2017/12/14(木) 08:46:43.07 ID:QIiUylbtp.net] >>451 いやそんなのしってるんだけど dim i string dim wb workbook application.Getopen filename:=で目的のファイルを開く そしたら「¥:目的のワークブック.xlsx」が文字列として帰って来る workbooks.open filename:=目的のファイル これで初めて目的のファイルが開く ここで本題 どちらも目的のファイルのバス名が返ってきているのに set wb = application.GetOpen filename だとエラーで set wb = workbooks.open (filename :=目的のワークブック.xlsx) これならwbオブジェクト型変数に代入される意味がわからない これをはっきり答えろ わかりやすくな
465 名前:デフォルトの名無しさん [2017/12/14(木) 08:47:18.91 ID:QIiUylbtp.net] >>452 一番上 ↓ 最上 日本語やり直したほうがいい
466 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:00:03.55 ID:n2gI2QxJ0.net] >>453 Set wb = Application.GetOpenFilename は、String型をWorkbook型のポインタへ代入しようとしてエラー吐いてる。 Set wb = Workbooks.Open(Application.GetOpenFilename) Set wb = Workbooks.Open("目的のワークブック.xlsx") は、OpenメソッドにString型変数を渡しているから機能する。
467 名前:デフォルトの名無しさん [2017/12/14(木) 09:02:02.66 ID:QIiUylbtp.net] >>455 workbook型のポインタってなに? これがわかればすっきり
468 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:02:04.79 ID:CHPwg0pDx.net] >>449 コレクションはオブジェクトの最上位、という発想がそもそも間違い コレクションは子要素に追加されているデータやオブジェクトへのアクセス等を提供する、子要素からは独立したオブジェクトだ 更に、WorkbooksコレクションオブジェクトはWorkbookオブジェクトのみを要素に持つようにあらかじめ最適化された規定のコレクションオブジェクト
469 名前:デフォルトの名無しさん [2017/12/14(木) 09:05:19.87 ID:QIiUylbtp.net] >>455 WB型変数に文字列代入は不可 メゾットの戻り値の代入は可能ってこと? なんで?
470 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:05:51.56 ID:YV9D93CW0.net] >>454 日本語だけ知ってても言語仕様を正確に説明する難しいんだよ コンピューター業界では「上位」などの言葉には特別な意味を持たせる場合もあるし、 とくに相手がド素人だと、言葉の意味から説明するのも面倒だから、あえて上位という単語は避けた上で なんとなく通じてくれそうな「上」って言い方をしたんだよ お前の態度が気に入らないからワッチョイ Spc7はNGするわ 人に何か質問する時は最後までていねいな言葉を使え
471 名前:デフォルトの名無しさん [2017/12/14(木) 09:07:28.47 ID:QIiUylbtp.net] >>459 うんこーwwwwwwwwwwうんこーwwwwwwwwww
472 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:08:52.24 ID:CHPwg0pDx.net] >>453 そもそもApplication.GetOpenFilenameはブックを開いてブックへの参照を返すメソッドじゃなくて、ユーザーにダイアログ画面上で選択させたファイルのパスを返すメソッドなんだが メソッド名で混乱してるだろ君
473 名前:デフォルトの名無しさん [2017/12/14(木) 09:11:20.55 ID:QIiUylbtp.net] >>461 いやしってるけど キャンセルが押されたらフェイルスだし 選択したらパス名が返って来る 何回言えば気がすむんだよ
474 名前:デフォルトの名無しさん [2017/12/14(木) 09:12:47.30 ID:QIiUylbtp.net] Openメゾットはただブックを開くだけだろ? ただし 引数を戻り値として得られる つまり 開いたファイル名がOpenメゾット内にある 違うかい?いい線いってる?
475 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:13:02.91 ID:n2gI2QxJ0.net] >>458 なんでも何もデータ型が一致するかどうかが問題であって、メソッドの戻り値の型は一致するってだけ。 たぶんJavaScriptから始めたせいで認識がおかしくなってるんだろうけど、 普通はデータ型が異なる変数同士の代入は出来ない。
476 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:14:18.68 ID:CHPwg0pDx.net] この質問者みたいな人が言語仕様について思い込みや勘違いをしたまま共用マクロを組んだりすると、会社にとって迷惑なだけなんだよな 作ったマクロを他人と共有しないことを祈るのみ
477 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:20:19.35 ID:CHPwg0pDx.net] >>462 それ俺がきのう説明したことだよねw オブジェクト型変数にGetOpenFilenameから返った文字列型データやデータ配列を設定しようとしてるのがおかしいんだがw データ型とか一回学んだ方が良いと思うよ それから蛇足だけど、フェールスじゃなくて、フォルス、フォールス、ファルスの何れかの表記にしないと、Falseのことだと理解してもらえないことが多いと思うよ
478 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 09:25:08.03 ID:CHPwg0pDx.net] >>463 引数の文字列は戻り値にならない Openの戻り値はWorkbookオブジェクトの実体だ Workbookオブジェクトの実体とパス文字列はイコールじゃない それから、メゾットじゃなくてメソッドな あんまり特徴的な言葉づかいしてるとメゾット君と フェールス君とか呼ばれたりするかもしれないから気を付けなよ
479 名前:デフォルトの名無しさん [2017/12/14(木) 09:30:34.82 ID:QIiUylbtp.net] >>467 実体でなに?どころどころで補足質問しねえといけねえのかよ
480 名前:デフォルトの名無しさん [2017/12/14(木) 09:31:25.92 ID:QIiUylbtp.net] >>464 変数同士? workbook型あとは何? これも補足質問
481 名前:デフォルトの名無しさん [2017/12/14(木) 09:32:51.20 ID:QIiUylbtp.net] >>466 データ型の参考ページは? 猿でもわかるやつ
482 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 12:17:27.13 ID:7XekaZVWx.net] >>470 その言い方は猿に対して失礼だぞメゾット君 WordやPowerPointのVBAと違ってExcelは「Excel VBA データ 型」でググれば腐るほど情報が出てくるから、好きなページを読んで出直してきたらいいさ インスタンスもググってみたらいいよ
483 名前:名無し mailto:sage [2017/12/14(木) 12:34:50.44 ID:DWbie50BM.net] >>468 Workbookの実体とは開いて実行しているエクセルブックのことだよ。ブックはVBAが管理しているメモリ上のデータではないってこと。そこにアクセスする為の情報だけがWorkbook型変数には格納されている。 これ以上はググったほうがいいな。メゾットちゃんには言葉だけでは通じないみたいだし。
484 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 12:36:44.73 ID:bra/P7/Ad.net] どう考えてもこいつは型も文法も戻り値も
485 名前:理解できてないだけだろ [] [ここ壊れてます]
486 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 12:45:31.15 ID:PlqHEg1vH.net] インスタンスはお湯かけて3分で完成するよ (´・ω・`)b
487 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 13:37:10.14 ID:D0PQd/9/a.net] 体系だてた答えがほしいならオブジェクト指向あたりの本読んだ方がいいんじゃねえの 正確にはオブジェクト指向じゃないけどクラスとインスタンス(やそれにくっついてるメソッドやプロパティ)の関係を理解するにはそれがはや道だわ ここは教科書じゃないから
488 名前:デフォルトの名無しさん [2017/12/14(木) 14:17:01.84 ID:QIiUylbtp.net] なんでぱぱっと答えられねえの?頭悪いの?
489 名前:デフォルトの名無しさん [2017/12/14(木) 14:18:03.10 ID:QIiUylbtp.net] >>472 ふーん 開いてから格納する これだけだよね?詰まる所は
490 名前:デフォルトの名無しさん [2017/12/14(木) 14:27:22.00 ID:QIiUylbtp.net] Openメソッドで開かないと workbook型に入らない
491 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 14:28:58.06 ID:oiVEYMPnp.net] それは結果に過ぎない ちゃんと原因や理屈を押さえないとまた同じことで詰むぞ
492 名前:デフォルトの名無しさん [2017/12/14(木) 14:49:26.55 ID:QIiUylbtp.net] >>479 それをわかりやすく教えて ほんとにわかりやすく
493 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 14:51:48.29 ID:/xE3TN/oa.net] >>480 無理だよ
494 名前:デフォルトの名無しさん [2017/12/14(木) 15:05:19.17 ID:QIiUylbtp.net] >>481 別の言葉に置き換えればいいだろ?
495 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 15:22:14.17 ID:yqG/N6/gM.net] ID:QIiUylbtpはVBA以外の言語知ってるの? それともExcel VBAで初めてプログラミングに触れましたって人? お前の学習レベルがわからないからお前でもわかるように説明できないんだ
496 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 15:43:20.73 ID:Sk339KZTa.net] ここには、彼の疑問に答えられるような人はいない。 こんぴゅうたーのでんげんをいれるとどうしてえくせるがうごくのかをせつめいするのはむずかしい。 でんきにはつうでんしてるときとつうでんしていないときがあるのでそれをりようしてぜろといちをくべつできる。 ぜろといちをくべつできればにしんすうをりようして...
497 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 17:51:08.32 ID:Gx1HQ3cua.net] 大体教えてもらう立場のやつがとる態度じゃないからまともに取り合ってもらえると思ってる時点で頭が悪い
498 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 18:34:15.80 ID:Dm16MIru0.net] 初心者なのに態度悪いからNGにしたわ。 教えてもらう態度じゃないよね。子供ならまあ納得だけど。
499 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 19:23:24.80 ID:IXGcMbV0a.net] そもそもWorkbooksに指定するのはエクセルファイル名じゃない。 ブック名だ。 開いたブックのブック名とファイル名が同じになるから勘違いしてる奴もいるかもしれんが。
500 名前:デフォルトの名無しさん [2017/12/14(木) 19:24:50.30 ID:oezENCsV0.net] 同じだったらファイル名でええやんw何鼻息荒くしてんの?w
501 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 20:32:08.46 ID:g1PrWAQxx.net] >>487 恐らく>>486 はWorkbooks.Itemの引数について話してるんだろうだが、君にはそのあたりが分からんみたいだな
502 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 20:33:08.02 ID:g1PrWAQxx.net] >>489 安価間違えた、これは>>488 宛
503 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 21:01:41.06 ID:bra/P7/Ad.net] >>455 をもとに考えてみた お金を入れるとカップにジュースが注がれる自販機を思い浮かべるんだ Set wb = 'ジュースが入るカップ Workbooks.Open( _'お金を判別してボタンが押されるとジュースを出す回路 Application.GetOpenFilename _'お金 ) →お金を入れてボタンを押したらカップにジュースが注がれる Set wb = Application.GetOpenFilename →カップに直接お金を入れて飲めないと騒ぐあほ どうだ!?
504 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 21:06:22.48 ID:zDxHi8mM0.net] >>453 お前バカだろ 変数wbはただの入れ物 workbook型しか入れられない入れ物にString型入れようとしてんだぞ? これでわからないならただのバカだから二度と来るな
505 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 21:25:56.75 ID:oezENCsV0.net] >>492 おまえのカアチャンは誰でも受け入れるのにwbって意外と固いんだな
506 名前:デフォルトの名無しさん [2017/12/14(木) 21:27:02.90 ID:QIiUylbtp.net] >>492 うん それはしってるよ でもworkbooks.Openでも同じだよね 文字列帰って来るよね
507 名前:デフォルトの名無しさん [2017/12/14(木) 21:32:46.73 ID:QIiUylbtp.net] application.getOpenfilename →あ.xlsxを選択 C:¥あ.xlsx が帰って来る workbooks.Open filename:=application.getOpenfilename(つまりC:¥あ.xlsx) ん?どっちもパス付きのブック名じゃねえの? ってことをいってる
508 名前:名無し mailto:sage [2017/12/14(木) 21:55:08.02 ID:5D+dY0yO0.net] >>495 文字列として返ってきたから文字列型と思ってるなら、一回workbook型をウォッチに入れてみたら? ツリー形式でオブジェクトの、中身が見れるから全然別ものだとわかるはず
509 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 21:58:53.83 ID:zDxHi8mM0.net] >>494 バーカw "C:\うんち.xlsx"がworkbooks型の変数に代入できる分けないだろw まあデフォルトプロパティなんてものが罪なんだが てか、workbooks型のデフォルトプロパティってNameプロパティなんだな(Pathか?) はじめて知ったわ、使わんから
510 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 22:19:18.62 ID:cH/6/SdG0.net] Application.GetOpenFilename → 指定したファイルのパス【String型(正確にはVariant)】を取得 Workbooks.Open → filenameに【String型でファイルパスを指定】すると そのファイルを開いた結果の【Workbook型オブジェクト】を取得 Dim str as String Dim wb as Workbook str = Application.GetOpenFilename →OK str = Workbooks.Open(Application.GetOpenFilename) →NG Set wb = Application.getOpenfilename →NG Set wb = Workbooks.Open(Application.GetOpenFilename) →OK オブジェクトブラウザーを見ると勉強になるよ それぞれ、こうなっている Class Application Function GetOpenFilename() Class Workbooks Function Open(Filename As String) As Workbook
511 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 23:32:44.97 ID:IXGcMbV0a.net] >>488 違う。 新規ブックの場合はファイル名じゃないだろ。 理解出来て無い奴に理解出来る奴向けの説明をしても駄目だ。 たまたま同じになってもブック名はファイル名じゃ無い。 だからパス付きだろうがパス無しだろうがファイルはファイルだと考えても、それとは関係ないブック名は違う。 C:¥abcd.xlsxというファイルとブック名としてのabcd.xlsxとは何の関連も無い。 似たように見えるのはたまたまだ。 だからC:¥abcd.xlsxはブック名には成りようがない。 >>495 Application.GetOpenFilenaneで帰ってくるのは"C:¥あ.xlsx"という文字だけな。 Excelブックとは関係ないファイル名だな。 例えばメモ帳で適当に入力して保存したファイルでも取ってこれるだろ。 それに別に"C:¥あ.xlsx"はExcelじゃないと開けないというわけでも無いぞ。 そもそも"C:¥あ.xlsx"はApplication.GetOpenFilenaneで取ってきたからファイル名だろうけど、取ってきた後のその文字列は=ファイル名とは限らん。 Dim wb As Workbook Dim strFile As String strFile=Application.GetOpenFilename ってのはstrFileにたまたまApplication.GetOpenFilenameによってファイル名が入ったということで、 Set wb = Workbooks.Open(strFile) のstrFileがファイル名かどうかは分からん。 このー文はApplication.GetOpenFilenameのことなんか知らんからな。 このー文の意味するところはstrFileをファイル名と思って開いてみて、開けたらwbに格納するってこと。
512 名前:デフォルトの名無しさん [2017/12/14(木) 23:34:29.57 ID:oVDd8Fug0.net] 短くわかりやすくまとめられるやついねえの? いくらVBAができたって引き継ぎができない奴は無能なんだが
513 名前:デフォルトの名無しさん [2017/12/14(木) 23:41:16.00 ID:oVDd8Fug0.net] 俺もずっとROMってたけど こいつらの説明はマジで意味不明だわ お、良い線言ってんな って思ったらいきなりカタカナ語がでてきてググっても意味不明 こいつらマジもんのコミュ障すぎてイラつきしかない オナニー発言ばっかで答えがない Apllcation.GetOpen でaaaっていうエクセルを開く C:\aaa.xlsx が返ってくる しかしWB(Workbookオブジェクト変数にしている)では指定できない でも Workbooks.Open filename:=Apllcation.GetOpen これはWorkBook型に入る つまるところどっちもC\aaa.xlsxって文字列を
514 名前:返してんじゃねえの?何がちげえの?ってこと これいうの10回目ないい加減学習しろイラつくな [] [ここ壊れてます]
515 名前:デフォルトの名無しさん [2017/12/14(木) 23:44:38.82 ID:oVDd8Fug0.net] こいつらのたとえ 子供がリンゴを指さす 「これなに?」 こいつら 「これは物質○○が含まれて○○っていう色素があって赤い、つまり栄養は○○がふくまれている ちなみにその栄養は○○って物質にも入っている」ドヤァ って感じ 見ててムカつくから発言したわ
516 名前:デフォルトの名無しさん [2017/12/14(木) 23:46:05.94 ID:oVDd8Fug0.net] おれが聞きたいのは なんでワークブックスオープンで指定したファイル名文字列だとワークブック変数に格納できんだよって話 ゲットオープンはパスがついているから格納できないのはわかった わかりやすく答えろ
517 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 23:55:54.24 ID:n2gI2QxJ0.net] 前にいた関西弁の荒しと同一人物なんだろうけど、健気にもちょっと勉強してきてるのが笑えるw
518 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 23:56:28.06 ID:qidVZ8HWa.net] >>503 無理。 軍事用にコンピューターというものが発明されてから今日までの歴史と仕組みを説明しなきゃならんから。 そして、君にそれを理解出来るだけの能力が有るとは思えないから。 大抵の人は全てを理解しているわけじゃ無いが、自分の利用している範囲ぐらいは理解している。
519 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:06:16.08 ID:sv72SjNaa.net] >>501 ん? >Apllcation.GetOpenでaaaっていうエクセルを開く これ間違い。 開かない。 ファイル名を取得するだけ。 >しかしWB(Workbookオブジェクト変数にしている)では指定できない ファイル名じゃないからな。 ブック名を指定する必要がある。 たまたま偶然ファイル名と同じだけどパス付きはブック名とは違うな。 >Workbooks.Open filename:=Apllcation.GetOpen これはWorkBook型に入る Workbook型に入ってるのはファイル名じゃない。 Set WB=Workbooks.Openの意味するところはfilenameに指定された文字列をファイル名と見立ててブックを開き、もし仮に運よく開くことができたらそのブックをWBに格納するという意味。
520 名前:デフォルトの名無しさん [2017/12/15(金) 00:18:22.73 ID:qta4Ddk+0.net] >指定された文字列をファイル名と見立ててブックを開き これが意味不明 GetOpenで指定したファイル名を返すんだろ? じゃあこれはファイル名になるじゃねえのか? ファイルを開かなかった場合はファルスがかえることはわかる
521 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:22:57.61 ID:OGmesrFEa.net] >>507 GetOpenFilenameの文とWorkbooks.Openの文は別の文だろ。 プログラム組む奴はGetOpenFilenameで取得したものと違うものを入れることも出来る。 だから結果的に入ったのはファイル名でも、 Workbooks.Open自身はそれを前提にはしないだろ。
522 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:25:39.28 ID:HZMi2rOwd.net] >>498 このレスの一番下がわかりやすいんじゃない?
523 名前:デフォルトの名無しさん [2017/12/15(金) 00:26:48.82 ID:qta4Ddk+0.net] >>508 日本語話して ドヤ顔くん
524 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:26:50.88 ID:Ma3k2IENa.net] GetOpenFilenameはメモ帳のファイル名を取って来ることも出来る。 Wordのファイル名を取って来ることも出来る。 Workbooks.Openで開けないファイル名ということも有るし、Workbooks.Openで開けるファイル名だとしてもExcelで開かなければならないということも無い。
525 名前:デフォルトの名無しさん [2017/12/15(金) 00:27:25.61 ID:qta4Ddk+0.net] >>509 オブジェクトブラウザーでてなんだよ わからねえよ
526 名前:デフォルトの名無しさん [2017/12/15(金) 00:28:29.79 ID:qta4Ddk+0.net] >>511 あーなんとなくわかったかな Openメソッドで開ける=エクセル型=ワークブック型に格納可能 ってこと?
527 名前:デフォルトの名無しさん [2017/12/15(金) 00:32:05.55 ID:qta4Ddk+0.net] >>498 つまりだ 君が言いたいのは(要約しないとダメなのかよ、、、) application.GetOpenfilenameだと文字列として返ってくる workbook型には文字列は入らない こういうことが言いたいのね?
528 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:33:26.47 ID:JSBwNcqSa.net] >>510 それはコンピューターというものをまるで理解出来ていないからそうなる。 厳密には strFile = Application.GetOpenFilename が実行されたからstrFileはファイル名だろとコンピューターに言っても、コンピューターは違います、文字列です。と言う。 strFileに入っている文字列のファイルは有るのかと問えば、有ります。と言う。 じゃあ、strFileはファイル名じゃねえかと問えば、違います、文字列です。と言う。 コンピュ−ターは人間が考えるような意味を理解しない。 定義通り動くだけ。
529 名前:デフォルトの名無しさん [2017/12/15(金) 00:35:45.56 ID:qta4Ddk+0.net] >>515 また回りくどい言い方してんな
530 名前:頭悪いのか [] [ここ壊れてます]
531 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:39:33.42 ID:OGmesrFEa.net] >>514 その理解で良い。
532 名前:デフォルトの名無しさん [2017/12/15(金) 00:41:12.92 ID:qta4Ddk+0.net] >>517 最初からこう言えよ 馬鹿じゃねえの? ほんとにバカしかいねえよ 呆れるというか心配になってくる
533 名前:デフォルトの名無しさん [2017/12/15(金) 00:42:06.72 ID:qta4Ddk+0.net] 補足するとworkbook.Openで返ってくる(開く)=workbook型ということね
534 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:42:07.75 ID:W4xtzKqva.net] >>516 君がどこまで分かって無いのか、こっちは分からないんだ。 エスパーじゃ無いんだから。 >>514 の話だって型とは何だ?という説明もしなきゃならんのか?と考えれば>>515 のような話も必要になって来る。
535 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:57:45.39 ID:2M4lhz74x.net] >>518 最初からみーんなそう言ってるぞw ようやく頭が追い付いてきたのかな?
536 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 01:03:08.36 ID:2M4lhz74x.net] メゾット君もだんだん自分の頭の悪さを自覚してきてるみたいだし、あと二日以内には恥ずかしい捨て台詞を残して消える運命かな レス保存したからいつでも再放送出来るけどなwww
537 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 01:23:44.47 ID:IJmI7Oq80.net] >>514 ,518 >>415 でまっさきに型を理解しろって言ってんだが まあここまで食い下がる根性は認めるけど、いいかげん最低限は自分で勉強してくれ
538 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 01:24:37.63 ID:JMZCHg3W0.net] 多分Excel VBA入門的な記事を読み進めればすぐに理解できたと思うんですけど 勉強の進め方が下手くそすぎる
539 名前:デフォルトの名無しさん [2017/12/15(金) 09:26:34.27 ID:qta4Ddk+0.net] で、この型をしっかりと説明してるのはどこだ?
540 名前:デフォルトの名無しさん [2017/12/15(金) 09:27:43.96 ID:qta4Ddk+0.net] URLでもなんでも貼ってよ
541 名前:デフォルトの名無しさん [2017/12/15(金) 10:46:54.06 ID:qta4Ddk+0.net] ちなみにさ VBAってなんでメンテナンスがいるの? コードを直接弄るわけじゃないからバグなんてでないと思うけど
542 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 11:01:21.94 ID:sRcKW4ZTM.net] てめーの提示したコードエラー出まくりバグばっかじゃねーか
543 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 11:23:22.68 ID:HChVIO9E0.net] コードは変わらなくてもWindowsとかExcelとか業務仕様とか、まわりが変わっていく
544 名前:デフォルトの名無しさん [2017/12/15(金) 11:26:16.78 ID:qta4Ddk+0.net] VBAは楽しいぞ 俺はmos マスターだがVBAはいっさん知らんかった 最終目標としては意味不明な超複雑なコードを記述し おれが辞めた後は誰も対処ができないという優越感を味わいたい そしてVBEをだしてカチカチしてる姿がなんとも知的でかっこいい ほんとこれだけのきっかけが知識につながって行く
545 名前:デフォルトの名無しさん [2017/12/15(金) 11:36:34.77 ID:yfj2Ro7Gd.net] 今どきVBAに新規参入者がいる驚き
546 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 11:48:05.70 ID:HChVIO9E0.net] >>530 >>500
547 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 12:00:52.51 ID:IqUBh/zH0.net] >>530 それは能力の低い奴の言う言葉。 能力のある奴はお前が辞めても対処できるように記述する。
548 名前:名無し mailto:sage [2017/12/15(金) 12:08:15.31 ID:aoP9DSfXM.net] >>530 いや、ずっと同じ質問してる辺りこれっぽっちも知識が増えているように見えないんだが そしてブーメランに草
549 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 12:11:37.98 ID:IqUBh/zH0.net] >>523 そこをあっさり理解出来ないからここまで時間制掛かってる。 彼の分かってない所はみんながそういうもんだとあっさり進む所で自分中心で考えること。 コンピューターが自分と同じように考えてくれると思ってる。 アレンブラやマシン語の不自由な世界で自分と同じようには考えてくれないということを思い知った方が良い。
550 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 12:26:43.87 ID:SvHkecGU0.net] もの凄く複雑で他人の理解が及ばな
551 名前:「ようなコード書くのが目標なら、 なおさら誰の助けも借りずに独学で高めていくのが重要なんだよなぁ。 ネットで検索して簡単に見つかるような情報すら当たれないヤツが目指すものじゃないよね。 [] [ここ壊れてます]
552 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 12:27:05.72 ID:JZsZmqT4r.net] >>499 いやなんかまた鼻息荒くしちゃってるけど元々同じって言ったのお前だからなw なんで素直にブック名とファイル名は違うって言えないんだよw どうせ下手くそな説明なんだから無理して技巧的に言おうとすんなw
553 名前:デフォルトの名無しさん [2017/12/15(金) 12:27:38.94 ID:qta4Ddk+0.net] >>535 こいつらのオナニー意見なんて一切参考にせず自己解決したんだが? Wrokbook型変数「これは文字列だから俺の方にははまらないよ」 = _ Application.GetOpenFilename「すまん、俺はただ選択されたファイルの文字列を返すだけなんだよ」 Workbook型変数「お、WorkbooksオブジェのOpenメソッドで開いとるやん。格納できるよ」= _ Workbooks.Open (Filename:=Application.GetOpenfilename)「俺は開いた文字列をファイル名として返すね」 これでどう?誰でもわかりやすいと思うけど? 頭悪すぎね?君たち
554 名前:デフォルトの名無しさん [2017/12/15(金) 13:00:25.68 ID:yfj2Ro7Gd.net] なんか 1 + 1 =2 を 「1に1を加えると2になる」 と表現してる感じだなあ
555 名前:名無し mailto:sage [2017/12/15(金) 13:01:13.53 ID:aoP9DSfXM.net] もう突っ込まないぞ! 次のお客様どうぞ
556 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 13:03:33.01 ID:SvHkecGU0.net] >>539 そもそもWorkbooks.Openメソッドはファイル名を返さないから、 「1+1 は 2 じゃないぞ。俺たちは 1 + 1で200だ。10倍だぞ10倍」みたいなもん。
557 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 13:34:09.09 ID:8rowC9ysa.net] >>538 わかった!君はプログラムじゃなくて日本語の勉強から始めよう
558 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 13:34:59.69 ID:8rowC9ysa.net] 会話形式にしてくれないと理解できないといってくれれば誰か頑張ったかもねw
559 名前:デフォルトの名無しさん [2017/12/15(金) 13:57:32.57 ID:qta4Ddk+0.net] >>541 はいはいブック名ね どっちでもいいだろアホ
560 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 14:06:04.35 ID:SvHkecGU0.net] >>544 ブック名も返さないよ。 何にせよWorkbooks.Openメソッドが名前を返したら Set WB = Workbooks.Open(Application.GetOpenFilename) が成立しないから。
561 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 14:12:36.10 ID:sRcKW4ZTM.net] いいからMSDNのリファレンス読んでこいよ
562 名前:デフォルトの名無しさん [2017/12/15(金) 14:42:08.62 ID:qta4Ddk+0.net] >>545 はいはい workbookオブジェクトを返すのね はいはい死ね死ね
563 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 14:44:22.53 ID:IqUBh/zH0.net] >>538 それ、全部既に言ってたからw お前はみんながすんなり分かるところをこれだけすったもんだしてやっと分かっただけ。 これまでのやりとりが無かったら、それそのまんま言っても理解出来て無い。 そもそも、バカがどうしてバカなのかなんてこっちは理解出来ない。 お前とは違うからな。
564 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 14:47:50.40 ID:xyZ0U828M.net] メソッドの返り値として何の型のどんなオブジェクトが返ってくることを意識する重要さが微塵もわかってないのでこいつのVBAスキルはここで打ち止めだな
565 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 15:09:10.26 ID:vqijPR8bp.net] 以降はスルーしよう
566 名前:デフォルトの名無しさん [2017/12/15(金) 15:21:09.44 ID:yfj2Ro7Gd.net] 整数 + 整数の戻り値が整数なのに整数 / 整数の戻り値が整数じゃない理由がわからない、不合理だ、と 駄々をこねる人間もいるんだからしょうがない
567 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 19:31:32.21 ID:lmKJ5VLWa.net] 世の中にはこういう本物のバカもいるんだなあと勉強になったよ
568 名前:デフォルトの名無しさん [2017/12/15(金) 19:39:48.70 ID:IAZ3SurN0.net] わりとそこかしこに居るけどな、本物のバカ ひきこもりか?おまえw
569 名前:デフォルトの名無しさん [2017/12/15(金) 21:40:28.03 ID:qta4Ddk+0.net] >>549 まだ始めて2週間って話してなかった? ちなMOSエキスパート所持者ね
570 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 21:49:11.45 ID:SvHkecGU0.net] >>421 からもう二週間も経ったのか。時が経つのは早いな。
571 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 22:06:37.13 ID:5LKBHQ7A0.net] >>554 > ちなMOSエキスパート所持者ね ここ、笑うとこですか?
572 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 22:06:40.33 ID:sA/nQpBXa.net] MOSエキスパート? 何それ美味しいの? 昔、「初心者だから仕様がないけどさ」と説教した相手が今回君が挑戦してる言語のエキスパート持ってたけどさ。
573 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 04:53:25.79 ID:kSf4Qz7z0.net] 先日、AutoFilterとValidationの不具合で質問したものです。 (まだ解決していませんが、、) また新たな不具合に悩まされています。 このような場合、どこに報告すればMSの目にとまりますかね? もし同一環境のかたおられましたら再現テストしていただけるとありがたいです。 [環境] Microsoft Office Home and Business 2013 バージョン: 15.0.4989.1000 (2017/12) Excel2013 Win10 64bit Core i7 Mem8GB [手順] 以下の手順で実行するとシートSelectが不完全な状態になる。 Trigger: 別シートの貼付画像のOnAction →PopupMenuのOnAction →呼び出されたProc内で、SheetSelect 続けてAutofilter実施 (直接の原因ではない) (その2へ)
574 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 04:53:47.87 ID:kSf4Qz7z0.net] >>558 (その2) [現象] ・Fitering成功しているように見えるが、非表示セルにカーソル移動できてしまう。 ・セル値の削除が効かない。(連動イベントが動かず、本現象に気づく) ・範囲コピー貼り付けが正しく行われない。 ・セルをコピーモードにしても、選択範囲が破線矩形にならない。 →なんと恐ろしいことに、操作の対象が現在見えているActiveCellではなく、 呼出元画像のあるシートの同一番地に対して行われている様子。 破線矩形も元シートを開いたらそこにあった。 削除処理も元シートに対して行われる。 ステータスバーのセル値カウントも、現在見えているシートではなく、呼出元の情報を返す様子。 ActiveCell.Address(External:=True)は実際に見えている移動先シートを示しているのに、、、 [発生条件の再検証] ・別シートの画像.OnAction→Popup.OnActionで初めて成立。 ・画像.OnActionから直接Proc実行(Sheet選択、Autofilter実施)では再現せず。 ・Alt+F8からのPopup起点とすると再現せず。 ・Popup.OnActionを入れ子にしても再現せず。 ・ボタンをTableと同じシートに配置した場合は再現せず。 ・Office2010では再現せず。 (その3へ)
575 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 04:54:06.08 ID:kSf4Qz7z0.net] >>558 (その3) [試験に用いたコード] 1) テーブルとは別シートにある画像を選択して、ImmediateからOnAction登録。 Selection.OnAction = "mkPop" 2) Popup生成 Sub mkPop() With CommandBars.Add(Position:=msoBarPopup) With .Controls.Add .Caption = "Filter" .OnAction = "DoFilter" End With .ShowPopup .Delete End With End Sub 3) Filterling実施 Sub DoFilter() Sheets("List").Select Sheets("List").Range("$A$1:$C$5").AutoFilter Field:=1, Criteria1:="TEST" Debug.Print ActiveCell.Address(external:=True) '確認用 End Sub ** 実際には機材画像のPropertyから読み込んだ文字列でフィルタリング。 ** 今回はAutoFilterは無実でシート選択の不全実行が現象の概要とみています。
576 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 04:56:00.08 ID:kSf4Qz7z0.net] >>558 環境情報が抜けていました。 Win10 バージョン 1703 (OS ビルド 15063.786)
577 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 05:17:34.49 ID:kSf4Qz7z0.net] >>558 (その4) 回避のためのリフレッシュ手順を忘れておりました。 [効果があるリフレッシュ操作] ' 以下、または手動によるシート切替(Screenupdating=False効かず、ちらつくが、、) '-------------------------------- Application.SendKeys "^{PgDn}":Application.SendKeys "^{PgUp}" ' Popup表示前にSheet移動してしまう。(Cancel有無にかかわらず移動してしまうが、、) '-------------------------------- Application.ScreenUpdating = False: Sheets("List").Select .ShowPopup [効果がないもの] ' Filtering直前のAutoFilter再設置 ActiveSheet.Range("$A$1:$C$5").AutoFilter ' 画面再描画処理 Application.ScreenUpdating = False: Application.ScreenUpdating = True ' その他、以下を試したがNG Application.EnableEvents = True Application.DisplayFullScreen = True: Application.DisplayFullScreen = False Application.CalculateFull Application.CalculateFullRebuild AppActivate (Application.Caption) Worksheets("List").Activate Application.StatusBar = "aaaaaa": Application.StatusBar = False MsgBox "OK"
578 名前:名無し mailto:sage [2017/12/16(土) 05:26:07.46 ID:j6rMoAMF0.net] そういうときは、doeventsやwaitも試してみるべし 今パソコン無いから試す暇がない
579 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 05:36:15.74 ID:kSf4Qz7z0.net] >>563 そういえばDoEventsは試しました。 結果効果はなく、SendKeysを無効化して現象回避もできなくなるという逆効果も確認しました。 Waitはどこに入れると効果的ですかね。 間にStopを入れて一時停止したりはしてみましたけど、、、
580 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 05:45:39.73 ID:kSf4Qz7z0.net] >>563 今回のはあまり待ち要素はないと見ていますが、以下の3カ所に2秒ほど入れてみました。 ・シート切替の前後、.ShowPopupの直前 再現してしまいました。
581 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 18:57:10.19 ID:9cn7Nun80.net] 現在vbaをネットで勉強中ですが書籍も使って勉強しようと思っています プログラミング初心者がvbaを学ぶのにお勧めの書籍を教えていただけませんか?
582 名前:デフォルトの名無しさん [2017/12/16(土) 20:17:51.76 ID:7KC6Lrbda.net] VBAで書籍は金の無駄だよ 最初はマクロの記録を見るのとネットでぐぐれば大抵のことはできるよ
583 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 20:36:50.77 ID:IU5B3eEvp.net] データの入力規則にカンマ区切りの項数不定の1-9の数字のみを許容したいのですが、どうすればよいですか? 正規表現だと、こんな感じです。 /^([1-9]+,)*([1-9]+)$/ regexp使ってVBAでチェックする方法ならやり方が分かるのですが、セルのデータ入力規則で設定する方法が分かりません。
584 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 20:57:31.30 ID:yaHEvAoH0.net] >>568 シートのChangeイベントあたりに そのコードを仕込んでおくのはいかがでしょうか ダメな場合はエラーメッセージ出して、セルの値を消しちゃえば 入力規則チックになるかと
585 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 21:10:04.55 ID:yaHEvAoH0.net] >>566 本格的にやりたいなら、VBAと関係ないように思えるけど 「スッキリわかるJava」シリーズをオススメしたい。 自分の場合、VBA本ではさっぱりだったけど、この本で目覚めた。 オブジェクト指向の解説は、VBAの理解にもかなり役立つ。 プログラミング言語は根幹は同じで、方言みたいなもんなので 他の言語にもすんなり入っていけるようになる。 やれることが多くなるよ。
586 名前:デフォルトの名無しさん [2017/12/16(土) 21:57:56.42 ID:0LU2hdfpp.net] オブジェクト指向をVBA始めて1週間だが理解してみた まず 変数は何かの型に入れる お前はこれしかできねえよ っていう そして その型の中のさらに型の中の命令はなに? と掘り下げて行く これがオブジェクト指向
587 名前:デフォルトの名無しさん [2017/12/16(土) 22:19:01.15 ID:vwwP6eCQd.net] >>571 違うけど気にしないでいいよ 厳密なな定義ないから
588 名前:デフォルトの名無しさん [2017/12/16(土) 22:21:35.33 ID:6cm/hyEb0.net] あと一歩というところだな、実にオシイと言っておこう しかし始めて1週間でそこまでオブジェクト指向の真髄に迫るとは大したものだ 末恐ろしい奴が現れたもんだ、これは俺もうかうかして居られんな
589 名前:デフォルトの名無しさん [2017/12/16(土) 22:26:05.73 ID:vwwP6eCQd.net] なるほど 俺が間違っていたようだ
590 名前:デフォルトの名無しさん [2017/12/16(土) 23:09:21.00 ID:9T+lJsLD0.net] お、おぅ
591 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 23:16:38.47 ID:jWdcz3p90.net] Access だと、ずいぶん前から SendKeys は使うな ってのが喧しいが Excel だと現役なんか? いいんか?
592 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 23:32:07.04 ID:oxEVVuR00.net] >>558 (その5) 画像リンクが外部ファイルにある場合はSendKeysも役にたたないようです。 なんかいい回避策ないですかね?
593 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 01:01:58.50 ID:ZCl426tV0.net] たんにActiveCellのシートが思ってるものじゃないだけの気がするなぁ そのコードどこに書いてるんだよ
594 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 01:39:41.36 ID:F05u2uwp0.net] 誰がオブジェクト恥垢やねん!(´・ω・`)b
595 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 04:46:14.88 ID:Hjh32hjm0.net] >>578 どゆこと? 例えばですね、他Bookにある画像をクリックしてそこにPopupが表示され、フィルタ処理を選びます。 で、フォーカスは対象テーブルのあるブック・シートに遷移して、フィルタリングに成功します。 SDIなので画面上は呼出元ブックとテーブル用ブックが2つ並んでおります。 ここでScriptは完了するわけですが、追加の操作をするために、遷移先シートを明示的に選択。 明らかに自分はその目的のシートを選んでいます。 ここでImmediateから、ActiveCell.Address(external:=True)をたたくと明らかに今触っているセルの番地が、Book名、シート名、セル番地名のフルパスで戻ります。 ここでカレントセルのある範囲を選択反転してCopy操作を行うと、呼出元ブックの同じセル番地がコピーモードの破線矩形にかわるんです。 カーソルで下へスクロールすると、呼出元シートもリモコンで操作しているみたいに一緒にスクロールするんです。 削除操作も、、、、同一ファイルで操作している時は気づかなかったですが、別ファイルから行うと凄いびっくりなビジュアルが展開されます。 明らかに "ActiveCell" という状況が表と裏に分離されたような状態になるんです。 同じブックをWin7+Excel2010で操作した場合は起きません。 自ファイルだとSendKeysで逃げられるんですが、外部ファイルからシート切替しても呼出元が切り替わってしまって、、 テーブル側ブックがキー操作相当でシート切替されないとこの状態が解除されないみたいです。
596 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 05:09:02.50 ID:/bdPdb8E0.net] >>580 とりあえずActiveSheetとかSelectionとか使わない方法で実装するのはダメなの? あと同時に実行されるマクロは全て同じブックに入れておくべきだと思うよ。
597 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 06:51:48.24 ID:Hjh32hjm0.net] >>581 (その6) Debug用と問題回避のためにActiveCellを記述していますが、実際のコードでは使用していません。 >>560 のSelectionはコードの中に記述しているわけではなく、検証用の画像ボタンを登録する手順としてImmediateから実行しているだけです。極力BackEndから操作する派です。 実際の運用Bookでは極力同一ファイルにMacroを集めています。 Macro自体は仕事を完全に全うするのですが、、、そのあとシートの状態がおかしくなるという現象です。 状態を解消するには、呼出先のBookでシート切替を行う方法のみ。 で、発想を変えて、「外部から制御できないか」と考えました。 VBE内にVBSScriptを記述し、「中の外」からシート選択してみようと。 結果NG、再現してしまいました。 じゃあ、本当に外から制御すればどうかな?と思い、上記のVBScriptを同一フォルダに置いて呼び出す作戦に。
598 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 06:52:33.95 ID:Hjh32hjm0.net] >>581 (その7) -------------------------------- [Popupから呼び出すProc] Sub DoFilter() Sheets("List").Select Sheets("List").Range("$A$1:$C$5").AutoFilter Field:=1, Criteria1:="TEST" Call = Shell("wscript " & ThisWorkbook.Path & "\SelectSheet.vbs", vbHide) End Sub -------------------------------- [SelectSheet.vbsの中身] call SheetSelect_fromVBS Sub SheetSelect_fromVBS() Dim xlApp: Set xlApp = GetObject(, "Excel.Application") With xlApp .Workbooks("ListBook.xlsm").Activate .Worksheets("List").Select End With Set xlApp = Nothing End Sub -------------------------------- なんとこれが功を奏し、ActiveSheetの幽体離脱状態から抜け出すことができました。 シート切替も不要に。これで一先ず凌げそうですが、MSには不具合対応してもらいたいです。 コメントいただいた方々、ありがとうございました。
599 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 06:55:18.78 ID:Hjh32hjm0.net] >>583 あれ、一部書き間違えました。実際は、、 Call Shell("wscript " & ThisWorkbook.Path & "\SelectSheet.vbs", vbHide)
600 名前:デフォルトの名無しさん [2017/12/17(日) 10:32:12.89 ID:e1NNF66l0.net] つまりここでは なんの型にはめるのか? 命令は?状態は? だろ? でもCellsってプロパティだろ?なんで一発で状態から入るんだ?
601 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:20:01.90 ID:ZjZyIyTi0.net] >>585 Cellsはオブジェクトだ そしてWorksheetオブジェクトやCellsオブジェクトのプロパティでもある あと、ようやく時間ができたからWorkbookオブジェクトをVariantに代入しようとしたら当然のごとく「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」になった。 一体何を試してパスが云々なんて話が出てきたんだろう。 Dim V As Variant V = Workbooks(1) →代入不可 Set V = Workbooks(1) →VはVariant/Object/ThisWorkbook型 調べてみてもWorkbook型にデフォルトプロパティは設定してなさそう。
602 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:21:03.68 ID:ZjZyIyTi0.net] >>586 訂正 CellsはRangeオブジェクトだ そしてWorksheetオブジェクトやRangeオブジェクトのCellsプロパティでもある
603 名前:デフォルトの名無しさん [2017/12/17(日) 11:26:43.28 ID:e1NNF66l0.net] >>587 cellsはrange? 意味わからない プロパティでオブジェクトってなに? もっとうまく説明してくんね?
604 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:27:13.71 ID:gZkjaYao0.net] >>586 自分用語を使うどころかコードも正確にコピペできてないからそのまま実行しても無駄だぞ エスパー力を全力で働かせて察してあげない限り回答しても罵倒が返ってくる
605 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:37:53.28 ID:ZJu/+/V0x.net] >>585 メゾット君、プロパティだから状態というのは間違えやすい考え方だからこの際捨て去った方が良い プロパティは呼び出し元プログラムに対してオブジェクトのクラス内部への変数へのアクセスを提供するもので、アクセス先の変数のデータ型はプリミティブな値であることもあれば、何らかのオブジェクトである場合もある というか、オブジェクト式の途中で出てくるプロパティは全てオブジェクトへの参照を提供するプロパティだ Cellsの場合はRange型のオブジェクトへのアクセスを提供するプロパティだが、Grobalのメンバプロパティだから上位オブジェクト式を
606 名前:省略して書けるわけ [] [ここ壊れてます]
607 名前:デフォルトの名無しさん [2017/12/17(日) 11:46:44.41 ID:gC8RO3PCp.net] >>590 カタカタ使うな
608 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:53:12.87 ID:ZjZyIyTi0.net] >>589 そうだよな・・ 自分でクラス作ってみれば一発で理解できそうなものだが・・
609 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:59:28.64 ID:R4ec2g2Bx.net] >>592 あの質問者が自分でクラスを作れるようになるのって何年か先の話だろうな
610 名前:デフォルトの名無しさん [2017/12/17(日) 12:11:00.98 ID:gC8RO3PCp.net] クラス? オブジェクトに必要な要素を全部埋め込むやつだろ? もうできるよ? でもnewクラスの使い方が意味がわからない 同じクラスで(中身も同じ)なら作る意味ないんじゃねえの?
611 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 12:19:09.45 ID:ZjZyIyTi0.net] 確かにこれでは何年も先の話になりそうだ
612 名前:デフォルトの名無しさん [2017/12/17(日) 12:31:47.04 ID:gC8RO3PCp.net] いま、クラスをみてみた そしたらworkbookの中にworksheetsがプロパティとしていた どういうことだ? 俺はVBAの盲点をついたか?
613 名前:デフォルトの名無しさん [2017/12/17(日) 12:40:07.47 ID:gC8RO3PCp.net] 知りすぎたか?
614 名前:デフォルトの名無しさん [2017/12/17(日) 12:51:28.57 ID:gC8RO3PCp.net] dim i as long For i = 2 To i.Cells(.Rows.Count, 1).End(xlUp).Row このi.cellsの意味がわからない 教えてくれ
615 名前:デフォルトの名無しさん [2017/12/17(日) 13:07:40.63 ID:+CY9tzJPd.net] プロパティは内部変数へのアクセスに限らずいろんなこと出来るし、最初さっぱり理解できなかった。 まさかただのシンタックスシュガーだなんて想像してなかったからな。
616 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 13:23:13.67 ID:R4ec2g2Bx.net] >>598 このコードは絶対にコンパイル通らないぞ For i = 2 To i.Cells(.Rows.Count, 1).End(xlUp).Rowの意味なんてこっちが知りたいくらいだ
617 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 13:26:02.12 ID:R4ec2g2Bx.net] >>596 Worksheetオブジェクトのメンバの、Worksheetsコレクションにアクセスするプロパティじゃん 何が不思議なの?
618 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 13:27:44.67 ID:R4ec2g2Bx.net] New出来てないの笑える クラスモジュールを挿入できただけでクラス使えるようになってねぇじゃん
619 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 13:51:38.17 ID:5yg/jtY20.net] おそらく本職プログラマじゃなく事務の効率化でVBAに手出したんでしょ? どうせ片手間ならプログラミング適性無さそうだからおとなしくコピペで済ますのが無難だと思う たぶん永久に理解出来ないよ
620 名前:デフォルトの名無しさん [2017/12/17(日) 14:08:08.04 ID:gC8RO3PCp.net] >>600 正しいのはなに? https://i.imgur.com/rE2ZahI.jpg
621 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 14:15:19.48 ID:R4ec2g2Bx.net] >>604 自分で考えろよ、クラス作れるんだろ?w
622 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 14:17:42.01 ID:KxwCW4kM0.net] 最近オブジェクト指向の本読んでみたんだけど これまで作ってきた稚拙なスパゲティコードをこの際書き直してみたくなった
623 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 14:25:27.85 ID:R4ec2g2Bx.net] >>603 この人謙虚じゃないし、まぁ無理だろうな 素直に他人の文章やコードが読めず、自分の言語感覚だけで無理矢理白黒つけようとするだけの奴はそもそもプログラミングに向いてない
624 名前:名無し mailto:sage [2017/12/17(日) 19:27:22.86 ID:ZjZyIyTi0.net] >>606 今書き直しても、しばらくするとまた見識が増えて書き直したくなるだけやで
625 名前:デフォルトの名無しさん [2017/12/17(日) 19:31:24.74 ID:SRQ89yzu0.net] >>606 やめとき、もう一つ稚拙なスパゲティコードを作るだけやでw 魔道に堕ちた亡者どもはそれをリファクタリングと呼んでるらしいがなw
626 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 19:52:14.28 ID:/bdPdb8E0.net] >>607 メゾット君は>>573 の自演の通り、「○○が出来るなんて凄いヤツだ」って反応が欲しいだけでしょ。 その反応が欲しいだけだから本腰入れて勉強するつもりもないんだろうし、 彼の想像の中では、自分は「凄いヤツ」であり、それに反応する周囲は「凄くないヤツ」なので見下している。 見下している奴らと
627 名前:ゥ分の意見がぶつかったら自分の方が凄いので自分が正しい。だから自分の考えに固執する。 要するにヒカルの碁とかハイキューとかボールルームとかの主人公みたいな展開を妄想してんだろ。 どんな反応をしても彼の妄想に付き合わされるだけだし、妄想が維持できなくなると死ね死ね言うだけになるから構うだけ無駄。 [] [ここ壊れてます]
628 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 20:35:35.89 ID:oSmkXHksa.net] >>607 プログラミングだけじゃなくありとあらゆることに向いてないだろうな わからんのは仕方ないけど、最低限の態度がなってない ネットだからなにやってもいい、って考えのやつはいずれリアルでもぼろが出るわ
629 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 00:39:13.70 ID:mfb75Iey0.net] プロシージャにconstでいくつか定義してあってこれまで何も問題なく動いてきた さっきその定数の一つを=22から=23に変更したら 定数式が必要です、のエラーが出る どうみても何も問題ないようにみえて分からない まさかと思いつつ 'Const sht_right As Integer = 23 Const sht_right As Integer = 23 このように問題の起きた行をコメント行として すぐ下に書き直したらエラーがでなくなった こういうのってあるもん?
630 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 02:00:09.91 ID:rupxZ3Ov0.net] >>612 上の奴、本来のコードだと全角スペース入ってなくね
631 名前:デフォルトの名無しさん [2017/12/18(月) 02:32:05.22 ID:m7yapXyd0.net] >>604 i.cells じゃなくて ws.cells さらに、with ws が有るので ws が省略できるから .cells で良い
632 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 03:17:17.83 ID:7TDAIkSx0.net] >>612 99%は単なるタイプミス 等幅フォントでスペースが明示できるテキストエディタにコピペしてみる
633 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 06:23:46.35 ID:TbHEuMcS0.net] どこかから、コピペした文字列に、見えない制御文字が入っているとか?
634 名前:名無し mailto:sage [2017/12/18(月) 07:46:18.89 ID:fX+okHt3M.net] >>612 その事例は見たことないけど、納得のいかないエラーが出たときは、とりあえずエクセル再起動
635 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 07:59:26.09 ID:mfb75Iey0.net] >>613 >>615 >>616 と俺も思った んで何度も打ち直してみた ちなみに上に貼ったのはそのままコピペしたもの 2を3にしただけなんでね、よくわからん >>617 再起動しなかったかもしれないんでまた起きたらやってみるわ コメント行にしたもともとの行は削除しちゃったんで実験できなくてすまん
636 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 08:01:30.70 ID:aXpCltYZ0.net] Constでエラー出した事あったけど、Endを実行してからやったら治ったことあるな。 値が記録されたままだったとかじゃね。
637 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 10:33:59.62 ID:ueSdYdZDa.net] >>612 なんか、Enumでもそんなことがたまに起こるよ VBEのバグらしいけど
638 名前:デフォルトの名無しさん [2017/12/18(月) 13:34:10.63 ID:NqlVCppnp.net] VBAってどうやったら上達しますか? エクセル関数は達人級です エクセル関数みたいに慣れだけじゃ無理ですかね
639 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 13:43:31.23 ID:IKrWJ0B8a.net] >>621 Javaを勉強したらvbaも上達するよ
640 名前:デフォルトの名無しさん [2017/12/18(月) 13:47:42.85 ID:NqlVCppnp.net] >>622 JAVA押しさんこんにちわ
641 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 14:03:31.64 ID:yddZnfruM.net] Java推しはともかく他の言語を学ぶのはVBAの上達にも実際かなり役立つ
642 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 14:45:58.67 ID:c1zJrPAZp.net] (またメゾットくんだよ…)
643 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 16:14:09.20 ID:D45Nh6pha.net] >>623 ジャワティーの話しはしてないんだ、ごめんな
644 名前:デフォルトの名無しさん [2017/12/18(月) 16:30:46.07 ID:NqlVCppnp.net] VBAだけやればいい javaは環境が大変だ したいこともないし
645 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 16:48:04.05 ID:D45Nh6pha.net] プログラムの上達に早道はないんだよなあ というか、遠回りに思えることが早道だったりする と、自戒の意を込めて どうしてもエクセルと絡めたいならC♯でもいいけどな
646 名前:デフォルトの名無しさん [2017/12/18(月) 16:49:17.57 ID:7XOqOvzzd.net] 今のうちにPythonを学ぶ www.publickey1.jp/blog/17/excelpython.html
647 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 17:57:32.74 ID:pW3jV0rpa.net] ぱいそんってアメリカではもっともメジャーなスクリプト言語なんだっけ
648 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 18:15:03.66 ID:fX+okHt3M.net] 何故にPythonかと思ったらエクセルにPython組み込むって話が出てるんだな。勉強するか‥
649 名前:デフォルトの名無しさん [2017/12/18(月) 19:14:05.94 ID:/veb4c2e0.net] >>628 自己評価だとそう感じるのかもしれないけど できる奴は最初からできるし、できない奴はいつまでたってもできない プログラムってそういうもん
650 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 19:34:37.55 ID:pW3jV0rpa.net] >>632 そりゃあ人によっちゃ違うが、それは才能があるからで近道しようとしてそうなってる訳じゃないだろ わかんないことがあったら別の切り口から攻めると言うのもありじゃないの
651 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 19:45:01.61 ID:au4G9Tq20.net] VBAerさんついに終わるのか Pythonに駆逐されちゃうね
652 名前:デフォルトの名無しさん [2017/12/18(月) 19:45:05.21 ID:/veb4c2e0.net] >>633 ないとは言ってないよ 俺が言いたいのは、別の切り口から攻めようが近道しようが 既知の問題の解決策は知識として身につくが 未知の問題に対する解決能力は上げることができないって事 つまり上達とか意識しないで楽なやり方ばかり選ぶ奴がいつだって一番賢い
653 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 19:51:30.63 ID:pW3jV0rpa.net] >>635 天才の人は苦にしないだけでちゃんと道は通ってるよ
654 名前:デフォルトの名無しさん [2017/12/18(月) 19:54:37.06 ID:/veb4c2e0.net] >>636 何を言いたいのかよくわからんがそもそも俺が言ってるのは天才のことじゃない 単にプログラムができる奴とできない奴の話なんだが
655 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 19:57:32.60 ID:pW3jV0rpa.net] >>637 iqないとダメなのはプログラムに限らんし まあスレチだから退散するわ
656 名前:デフォルトの名無しさん [2017/12/18(月) 20:01:42.20 ID:/veb4c2e0.net] >>638 いやだからIQとかの話じゃないってば 目の前の問題をありのままに受け入れる事ができる奴と 既に自分の中に構築された知識に当てはめないと解釈できない奴の違いだって
657 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 23:11:06.58 ID:aXpCltYZ0.net] >>634 仮に採用されて皆がPython触るようになったら、今度はPython(笑)って扱いされる未来が見えるわ。 格好つけだけでやってる奴らが抜けて、AIとか作ってる真っ当なのが風評被害を受けそう。 言語は統一するよりも、それを扱うユーザー層毎に分けた方がいい。
658 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 12:28:53.96 ID:/mb664F4a.net] >>618 俺も似たようなの見たことがある。 でも引きずるような問題じゃ無かったと思う。 Excel再起動かPC再起動で直るんじゃね?
659 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 12:37:10.24 ID:pfZPHd/La.net] >>635 逆だと思うが。 未知の問題に対しての解決能力は上げることができる。 楽なやり方を選ぶ奴は上げられないだけ。 厳密には未知な問題といっても既知の問題と全く違うわけじゃない。
660 名前:デフォルトの名無しさん [2017/12/19(火) 16:48:29.82 ID:mNLh8c+i0.net] ここのやつらがあんまジャバジャバいうから引っ張り出して着たわ とりあえずコードは実行せずにパラ読みしようと思う https://i.imgur.com/peDAurF.jpg
661 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 17:01:17.86 ID:Bngslooy0.net] >>643 「わー、ロレックス持ってるなんてすごーい!」 「え?こんなの普
662 名前:ハだよ。持ってないとかwww」 みたいな展開になる事を期待してるんだろうけど腕時計の入れ方が無理やり過ぎて笑いしか出てこないw 本は中古屋で買ったみたいだし、あまりにもちぐはぐ過ぎてむしろ格を下げてるようにしか見えないんだが。 [] [ここ壊れてます]
663 名前:デフォルトの名無しさん [2017/12/19(火) 18:14:51.58 ID:J+VWEpvK0.net] >>642 うんだから最初に言ったんだけど自己評価だとそう感じるんだってば
664 名前:デフォルトの名無しさん [2017/12/19(火) 19:02:39.42 ID:mNLh8c+i0.net] JAVAの本でわかったこと 変数の宣言と同時に値を入れることを初期化という 変数の値が変わらないことを定数という いま10ページ目だけどこんくらいだわ
665 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 19:57:29.94 ID:9tP52mqX0.net] >>646 >変数の値が変わらないことを定数という これはちょっと違うのでは?
666 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 20:25:43.13 ID:fLKwjLgZa.net] >>645 お前の自己評価がそう感じてるだけだろw 何か自分はプログラム書ける気になってるようだけどw
667 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 21:14:28.27 ID:4AWSTK/ra.net] 変数の初期かもなんかむずむずする理解だな
668 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 21:15:04.92 ID:4AWSTK/ra.net] あ、でも彼はジャワティーの話をしてるのか ならわからんでもない
669 名前:デフォルトの名無しさん [2017/12/19(火) 21:26:16.08 ID:mNLh8c+i0.net] javaのパスが通らなくて実行できない 助けてくれ
670 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 23:45:33.30 ID:jfHXMkXp0.net] Java は環境構築が難しいから、初心者には無理 paiza.IO, codepad などのサイトで、ブラウザから実行しろ
671 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 00:20:41.41 ID:USwfdD4Y0.net] 別にJavaが難しいと感じたことはないな。 すっげえ昔にかじっただけだから今となっては初心者以下だけど。 いや、当時も初心者だったけど。
672 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 00:28:51.85 ID:USwfdD4Y0.net] コンパイラもJavaで出来てるからJava実行環境でコンパイラ動かして、そのコンパイラへの引数にエディタで編集中のテキストを一時ファイルにしたものを渡してたな。 そのエディタもJavaで誰かが作ったものを機能拡張したやつだったな。
673 名前:デフォルトの名無しさん [2017/12/20(水) 00:40:50.45 ID:xfg3gakwa.net] コマンドラインが敷居高いならeclipseでやれ 敷居高いつっても環境変数設定してそこにパス通すだけだがな
674 名前:デフォルトの名無しさん [2017/12/20(水) 01:00:50.98 ID:sohN4awK0.net] javaって効率悪すぎだろ テキストエディタで編集 ↓ 名前つけて保存 ↓ コマンドプロンプトでコード入力 ↓ 実行 どんだけ時間かかるんだよ
675 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 08:24:00.28 ID:TZHE5kKsa.net] いやeclipse使えよ
676 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 09:28:33.38 ID:FRuTBLwYp.net] これ以上はスレ違いなのでJavaスレでどうぞ
677 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 09:36:49.97 ID:GPFg9WZwx.net] eclipseも知らないで手動でコンパイルしながらブチキレてるの想像してワロタ 道は遠いね
678 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 12:25:53.38 ID:Vi8ViNgtd.net] スレチ
679 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 12:41:32.07 ID:/dU/ndoRa.net] お前ら良かったな EXCELでPythonが使えるようになるかも知れないんだって? あれはObject指向の流れを組む関数型を目指しているところの言語っていうからやりがいはあるよね 俺もVB.NetやC#はやったけど EXCELに載ることが確定したらこれからPython覚えるわ まぁ構造化言語からObject指向型言語に移行したとき めちゃくちゃ苦労したけど 今回も苦労するんだろうなぁ
680 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 13:38:58.93 ID:/fbzm/vOa.net] Pythonはさらっと概要見たぐらいだけど面白そうだね まあexcelにのらなくても勉強して損にはならんだろうな
681 名前:デフォルトの名無しさん [2017/12/20(水) 15:31:22.90 ID:EAMpcVD20.net] 必要ないもん勉強したって時間のムダだっつーの 真のエ
682 名前:Nセルマクラーだったらマクロ書くのにパイソンしか使えなくなった時に必死でググれ [] [ここ壊れてます]
683 名前:デフォルトの名無しさん [2017/12/20(水) 16:07:26.91 ID:/h7jUJynd.net] 今のままでも関数型で出来るらしいが https://qiita.com/matumoto_onga/items/7adfd4cf48288c477901
684 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 18:29:06.12 ID:khkAeR460.net] Pythonはオブジェクト指向も関数型も全部後付けって感じでイケてねえ F#にしとけって でもこんなのはプログラマ以外が触るものだからしょうがないのかもな
685 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 19:00:00.85 ID:sxNo8wqUa.net] >>665 F#ってまだ生きてんのか!
686 名前:デフォルトの名無しさん [2017/12/20(水) 19:51:25.83 ID:7WhairgWd.net] 生きてるし、活発に使われてるよ ソースはない
687 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 20:52:44.38 ID:EAMpcVD20.net] ソースはないソースはよ
688 名前:デフォルトの名無しさん [2017/12/21(木) 23:06:47.24 ID:1PuX0k7mM.net] 100列ぐらい続く計算エクセルがある 足したり引いたりするだけのエクセル。 酷くね?VBAにできないものか
689 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 02:00:09.18 ID:T3zOnX2zx.net] >>669 計算エクセルっていう表現が意味不明だが要は計算用のワークシートのことか? 大抵の場合、ワークシート関数とテーブル機能を組み合わせて何とかする方がVBA使うより楽だぞ 車輪の再発明をしてもしょうがないからな
690 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 04:21:53.41 ID:0EXQoFbJ0.net] 質問です。 Excel側からVBE上の指定のプロシージャ記述欄にジャンプする動作をVBAで記述できる でしょうか? やり方がわからずとりあえずSendKeysを組み合わせて動作するようになったのですが 不慮の事故が起きそうで怖いです。 VBEのオブジェクトモデルに沿ったアクセス方法があれば教えていただけないでしょうか。
691 名前:デフォルトの名無しさん [2017/12/22(金) 07:49:35.63 ID:BCzwPGy5d.net] >>671 VBE上でカーソルの位置をコントロールするってこと?
692 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 11:50:10.85 ID:7Q1lZFEo0.net] >>672 メンテのためにActiveBookから全Procのリストを新規Sheetに出力する Procedureを用意したのですが、Proc名からVBE上の該当Procにジャンプ したく、右ClickEventにジャンプ機能を割り当てました。 正しいアクセス方法がわからないので、ほぼSendKesyのみで記述している のですが、状況により意図しない挙動をします。 VBEを開く動作は "^{F11}"の代わりに Application.CommandBars.FindControl(ID:=1695).Execute が使えそうなことはわかったのですが、、、 VBE上で1つもModuleが開かれていなかったり、開かれているModuleと、ツリー 側の選択されているModuleが異なったりすると、"^F"が効かないようです。 FrontEndからではなく、ObjectModelに沿ったBackEndからの操作が 知りたいのですが、うまく情報を見つけられないところです。
693 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 12:58:52.19 ID:7Q1lZFEo0.net] >>671 自己解決しました。 キーワードを英語に切り替えてGGったら、StackOverFlowですぐ見つかりました。 .CodePane.GetSelection .CodePane.SetSelection あたりでなんとかなりそうです。お騒がせしました。
694 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 17:40:48.08 ID:3J82DkVga.net] VBAやりはじめて三年ぐらいだけど、For Eachで普通の配列もループできるの今日知ったわ コレクションだけだと思ってた
695 名前:デフォルトの名無しさん [2017/12/22(金) 18:05:37.66 ID:/KqbyaeQd.net] >>675 値の取得だけで設定はできないけどねー
696 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 18:16:05.21 ID:3J82DkVga.net] >>676 クラスの扱いが大分変わるのよ わざわざイテレータ自作してたわ
697 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 00:05:26.91 ID:/nzAEvVba.net] >>674 できるんだけどセキュリティ的に問題だからお勧めしない。 .netで書いた方が良いぞ。 でもVBEを操作するコードが書ければ、.net上でも殆ど同じコードでいけるから勉強しとくと良いかな。 [] [ここ壊れてます]
699 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 06:34:44.47 ID:F3cHZlpp0.net] sheet1に置いたボタンを押してからsheet1内のセルをクリックすると、クリックしたセルに「ここ」 とはいるようにしたいです。実際作りたいものはもっと複雑ですが、とりあえず。 そこで、sheet1のシートモジュールに以下の記述をしました しかし、どうやら前回クリックしていた場所を覚えていて、その場所に「ここ」と入ってしまいます 解決法はありますか? Private Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer Private Sub CommandButton1_Click() Do If GetAsyncKeyState(VK_LBUTTON) Then ActiveCell.Value = "ここ" Exit Do End If Loop End Sub
700 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 06:43:21.92 ID:F3cHZlpp0.net] >>679 で書き忘れ 標準モジュールの宣言部に Public Const VK_LBUTTON = &H1 の記述もしてあります。
701 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 07:46:11.28 ID:8SavP0Th0.net] >>679 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count = 1 Then Target.Value = "ここ" End Sub クリックした場所に入れるだけならSheet1モジュールにこれで済むけど、コルーチン処理が必要というなら分からん。 いずれにしてもActiveCellとかActiveSheetとかは避けて設計すべき。
702 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 07:56:20.90 ID:F3cHZlpp0.net] >>681 自分もググってたどりついた先がそれだったんですよね でも常に発動してる状態だとやっぱり困るんですよ 一応application.enableevent を使って停止しておくこともできるようなので、 通常は停止しておくことも考えてはいます 設置したボタンを押したときだけ機能するようにしておけばいいのかな、と。 Worksheet_SelectionChange使う以外方法がなければそうするしかないですが 無効にしてる間はイベントが一切反応しなくなるという事なので、 イベント付きの他のブックを併用するようなケース等で問題が起きそうで迷ってます
703 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 08:00:18.36 ID:8SavP0Th0.net] >>682 なら If ToggleButton1.Value Then とか加えておけばいいだけでは?
704 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 08:11:12.55 ID:F3cHZlpp0.net] >>683 お・・これはいけそうです こういう使い方があるんですね・・・ 作業を先に進められそうです ありがとうございました
705 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 10:35:36.95 ID:oVsH3Gmz0.net] フォームコントロールボタンの文字の色を変えたいんだけど セレクトしない方法はないのですか? Sub test01() n = Worksheets("Sheet1").Shapes("Button 1").Name Worksheets("Sheet1").Shapes(n).Select Selection.Font.ColorIndex = 3 End Sub
706 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 10:51:51.14 ID:YCHexesv0.net] フォームコントロールボタンの文字の色を変えたいんだけど セレクトしない方法はないのですか? Set n = Worksheets("Sheet1").Shapes("Button 1") n.Font.ColorIndex = 3 みたいな?
707 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 13:25:10.14 ID:Zcbsqwvta.net] シート上のボタンならtoggleにしなくてもモジュールレベルのクリックフラグ変数で管理できねーか?
708 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 13:35:38.33 ID:8SavP0Th0.net] >>687 出来合いのものを、わざわざ回避する利点は?
709 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 15:32:28.22 ID:tRk+L7lt0.net] >>688 いや、最初コマンドボタンだったからコマンドの方がいいのかなって思っただけ 別に必要無いなら必要無いでいいし
710 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 18:23:21.18 ID:3q2JAS6ba.net] >>686 逆に何でセレクトしなきゃならんのかが分からん。 普通セレクトなんてしないだろ。
711 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 18:24:04.16 ID:3q2JAS6ba.net] すまん。 >>685 向けね。
712 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 19:38:10.94 ID:DrTFst260.net] >>685 Worksheets("Sheet1").Shapes("Button 1").TextFrame.Characters.Font.Color = vbRed または Worksheets("Sheet1").Buttons("Button 1").Font.Color = vbRed SelectするとButtons("Button 1")をオブジェクトとしてSelectionに持つので Selection.Font.Color = vbRed でいける 一方、ShapesはFontオブジェクトをもっていないので Fontオブジェクトを持っているヤツまで掘り下げてかなければダメ ということだと思う。
713 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 19:53:54.32 ID:AF0984djx.net] >>692 直感的な説明だが、オブジェクトがオブジェクトを持つという表現は間違い オブジェクトが持つのはあくまでメソッドとプロパティからなるメンバで、いわゆる下位オブジェクトにはメンバを介してアクセスしてるだけだからな
714 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 20:15:31.85 ID:oVsH3Gmz0.net] >>692 マクロの記録でやってたので。1行で可能なのですね。 TextFrame.Characters.Font.Colorでググったら出てきました。 ありがとうございました。
715 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 20:55:59.08 ID:afY4COyy0.net] ちなみにButtonsとかCheckBoxesとかは隠しプロパティ ヘルプにもでてこないからな なんで隠してあるのかねぇ
716 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 00:26:44.47 ID:oSJcOqyea.net] >>694 分かるよ。 そういう人がとても多いから。 でも、殆どの処理はセレクト無しで書ける。 個人的にはセレクト無しで書けない場合でも何とかセレクトせずに書けないかを考える。
717 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 00:45:00.70 ID:BN72T8jr0.net] まあ、大多数の用途では得られるメリットが少なすぎてSelectを消す意味は薄いけどな
718 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 01:23:50.46 ID:2PxYmIQzx.net] オブジェクトのプロパティにアクセスする処理でSelectメソッドはなるべく使わない コードの実行中にデバッグ作業を行ったときなどに予期しないオブジェクトが選択されて、アクセスしたいプロパティにアクセス出来ずエラーになることがよくあるからね Rangeオブジェクトを指定していたはずがShapeオブジェクトやOLEObjectオブジェクトを選んでいたりとか
719 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 01:43:15.08 ID:O2udkTbW0.net] Selectは必ず代替手段があるから、範囲選択してユーザーに注意を促すとかでなけりゃSelect使う事に疑問を持った方がいい。
720 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 06:22:03.30 ID:ZKd7S1fn0.net] 起動中のIEからさらに別窓で開かれるフォーム入力用窓のIEオブジェクトを取得して操作したいと考えているのですが、 Function hoge() As WebBrowser Dim tmp As Variant For Each tmp In CreateObject("Shell.Application").Windows If TypeName(tmp.document) = "HTMLDocument" Then Set hoge = tmp Exit Function End If Next tmp End Function のようにShellを使ってもIEオブジェクトを取得できなくて困っています Set objIE = MAGIC(hWnd) のような形で、ハンドルからIEオブジェクトを取得する方法は無いでしょうか 他に方法があれば、ハンドルから取得する方法にこだわりません ただし、諸事情により外部からライブラリをダウンロードしてきて使用する、といったことはできないです
721 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 08:15:14.57 ID:BN72T8jr0.net] >>700 別窓かどうかの判定が抜けてる LocationNameとかLocationURLあたりを調べないと
722 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 11:59:50.98 ID:uwQxUsVy0.net] IEが複数あるかもしれないのに見つかったら抜けちゃうコードで何かおかしいと感じないの?
723 名前:デフォルトの名無しさん [2017/12/24(日) 15:06:20.77 ID:6Phr71Y20.net] Dim u As Long Range("A1", "I5").Value = u u = Round(u, 4) 四捨五入したいのに全部ゼロになる!
724 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:18:15.83 ID:CcW1Sn5Aa.net] >>703 uには何が入るの?
725 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:18:38.84 ID:CcW1Sn5Aa.net] てか、そりゃゼロになるだろw
726 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:27:49.11 ID:dho/ilxra.net] 何かが逆でワロタ。
727 名前:デフォルトの名無しさん [2017/12/24(日) 15:36:05.76 ID:6Phr71Y20.net] >>704 A1からI5のセルを桁指定したいんだ。 どうすればいいか教えてくれ
728 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:53:02.16 ID:sjlc/tcta.net] >>707 A1からI5の範囲に初期化したばかりのu(=0)を入れてる。 入れるのは逆で、入れた後で桁変更して戻す必要もある。 最初からuを使わずに自分自身に桁変更した自分を入れる方が普通かな。 そもそも見た目だけ桁指定する方が一般的だと思うが。
729 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:54:56.74 ID:CcW1Sn5Aa.net] 桁指定したいならexcel vba 書式設定 でググりなさい
730 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:56:16.29 ID:CBEBXlX2a.net] というか、値が複数(配列)だから一発でいけないだろ。
731 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:56:53.27 ID:JTJf6bSC0.net] それぞれの行のB列からC列を引きたいのですが、下のコードだと すべてB2-C2となってしまいます。 どうすればよろしいかご教示ください。 Dim i As Long Dim Lrow As Long Lrow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To Lrow Cells(i, "D").Formula = "=B2-C2" Next
732 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 16:09:57.86 ID:U3mSSLWjx.net] >>711 数式書き込んでるループ内の処理の右辺を "=$B" & i & "-" & "$C" & i にするだけ 折角行インデックスをiで指定してループ回してるんだから使わないと この程度のことだったらVBA使わなくても組み込みのテーブル機能で実現できるけどね
733 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 16:11:04.02 ID:O2udkTbW0.net] >>711 Sub foo() Cells(2, 4).Formula = "= B2 - C2" Cells(2, 4).Copy Lrow = Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(2, 4), Cells(Lrow, 4)).PasteSpecial End Sub
734 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 16:13:21.90 ID:JTJf6bSC0.net] >>712 >>713 ありがとうございました。
735 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 17:56:35.14 ID:ZKd7S1fn0.net] >>701-702 コードはあくまでも例で、実際はURLや文書内の文字列から判定しています 今回問題なのは、CreateObject("Shell.Application").WindowsをFor Eachで全要素を調べても、要素にそもそも含まれていない点です IEの子窓として存在しており、タスクマネージャーで調べるとプロセスも存在するのに、IEオブジェクトを取得できません しかし、WindowsAPIのFindWindowを用いるとハンドルの取得は可能だったので、 Set objIE = MAGIC(hWnd)のような形でハンドルからIEオブジェクトを取得する関数を作れないか質問させていただきました
736 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 19:48:46.67 ID:TDjZS1ex0.net] Excel2010です 以下のコードを実行すると、"$A$2"が表示されます。 セル範囲に添字0を付けた場合、セル範囲の先頭セルが参照される (この場合B2)と思い込んでいたのですが、私の誤りでしょうか? MsgBox(worksheets(1).range("B2:C3")(0).address)
737 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 21:16:40.55 ID:ODr8GH0o0.net] 0 じゃなく 1
738 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 22:01:25.06 ID:TDjZS1ex0.net] >>717 ありがとうございます OffSet()だと原点がゼロなので そういうのと混同していたかも知れません
739 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 22:44:17.96 ID:4FfGU/eI0.net] Dim FSO As Object Set FSO = CreateObject("scripting.filesystemobject") Dim folder As Object Set folder = FSO.getfolder(ファイルパス) Dim f As Object For Each f In folder.Files If f.Name Like "*" & Month(Date) & "*" Then ’ここでファイル名を翌月に変えてコピーを作成したい End If Next ファイル名は「AAA〇〇月BBB」で統一(ABは文字列で〇〇は月を二桁表示) 抽出できた今月ファイルをコピーして名前の〇〇を翌月に変更したもの(翌月ファイル)を同フォルダ内に作成したいです コピー元ファイル名を継承して一部だけ変更する良い方法が見つからなかったので教えてください
740 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 23:29:24.13 ID:XB6s5ekxa.net] >>714 そのセル全部のRangeに対して"=B2-C2"でいける。
741 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 00:16:31.32 ID:2KDGjSox0.net] >>719 Sub foo(FolderPath As String) Dim FSO As New FileSystemObject Dim c As New Collection Dim Folder As Folder Dim File As File FindWord = "*" & Month(Date) & "*" Set Folder = FSO.GetFolder(FolderPath) For Each File In Folder.Files If File.Name Like FindWord Then Exit For Next If File Is Nothing Then Exit Sub s = Split(File.Path, "\") For i = LBound(s) To UBound(s) If s(i) Like FindWord Then e = Split(s(i), ".") s(i) = Month(DateAdd("m", 1, Date)) & s(1) End If FilePath = FilePath & s(i) If i < UBound(s) Then FilePath = FilePath & "\" Next FSO.CopyFile File.Path, FilePath End Sub 試してないけどこんな感じかなぁ。
742 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 08:06:21.04 ID:fMKsEfdQa.net] >>719 fileName = Replace(fileName,○○,××)
743 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 08:07:54.57 ID:fMKsEfdQa.net] ああ、AAAとBBBに数字がない前提じゃないとダメだな
744 名前:717 mailto:sage [2017/12/25(月) 12:59:33.91 ID:5/ecyLcnM.net] >>721 >>722回答ありがとうございます まだ試せていませんが AAA○○月BBBじゃなくて AAABBB○○月にした場合もう少し簡単に記述出来ますかね? ちなみにABに数字は含まれてないです
745 名前:デフォルトの名無しさん [2017/12/25(月) 16:18:43.87 ID:dIh/hlW50.net] んんんんあああああああああああああああああああああああああああああああああ
746 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 16:44:33.34 ID:DuOFgh3Va.net] コピーしてファイル名置換するだけでしょ? フォルダもすでに取得してるなら fso.copyfile file.Path,folder.Path & "\" & Replace(file.Name,"○○","××") だけで行けるんじゃね
747 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 17:30:49.11 ID:1470x9yD0.net] UserFormに「次へ」のボタンをつくり複数のUserFormを次々と経由することで対話式に値を取得していきたいと思っています 誤った選択をしてしまった場合に備え、戻るボタンも作るとします ○UserForm1の「次へ」ボタンのクリックイベントに以下のように記述しました Me.Hide UserForm2.Show ○そしてUserForm2の「戻る」ボタンのクリックイベントには以下のように Me.Hide UserForm1.Show うまくいったと思いきや、一度1に戻ってからもう一度UserForm2を再表示させると UserForm2のinitializeに書いた処理が実行されません。 仕方が無いので1の次へに UserForm2.Show Unload Me と書いてみると、今度は2から戻る時に、「フォームは既に表示されています。モーダルに表示できません」と出ます 2の「戻る」には上に書いたようにMe.Hideがあるにも関わらずこのエラー表示 解決法はありますか?
748 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 17:46:45.39 ID:DuOFgh3Va.net] >>727 ユーザーフォームの行き来はめんどくさいしスパゲティになりがちだからやめた方がいいと思う というのはさておき、initializeじゃなくてactivateイベントにしてみたらどうかね
749 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 17:48:18.57 ID:1470x9yD0.net] いやいや何か間違えてる 修正 仕方が無いので2の「戻る」に UserForm1.Show Unload Me と書いてみると、今度は1から2にもう一度行こうとすると、「フォームは既に表示されています。モーダルに表示できません」と出ます ついでにとにかくhideは避けてすべてunloadにしてもやはり2→1の段階で同じアラート 解決法はありますか?
750 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 17:48:59.15 ID:1470x9yD0.net] >>728 ありがとうございます 調べてみます 分からなかったらまた書きますのでお願いします・・・
751 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 18:01:10.24 ID:1470x9yD0.net] >>728 うまくいったようです 3時間ほど解決法が見つからず頭抱えてました 感謝です
752 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 22:53:06.92 ID:S4ukHgvI0.net] sub test() 'マクロ起動用
753 名前:エクセルがあるフォルダ内のフォルダ名の取得 Dim strPattern As String Dim strFolder As String strPattern = "C:\xxxxx" strFolder = Dir(strPattern, vbDirectory) Do While Len(strFolder) > 0 If GetAttr(strPattern & strFolder) And vbDirectory Then If strFolder <> "." And strFolder <> ".." Then 'if文始まり '各フォルダ内にあるエクセルファイル名の取得 Dim FSO As Object Set FSO = CreateObject("scripting.filesystemobject") Dim folder As Object Set folder = FSO.getfolder(strPattern & strFolder) Dim f As Object For Each f In folder.Files If f.Name Like "*" & Month(Date) & "*" Then 'ファイルパスに今月が含まれている場合 FSO.copyfile f.Path, folder.Path & "\" & Replace(f.Name, Month(Date), Month(DateAdd("m", 1, Date))) Debug.Print f.Name End If Next End If 'if文終わり End If strFolder = Dir() Loop End Sub 717ですが上の記述で一応期待通りの動作をしてくれました 皆さんありがとうございました ただこれだとファイル名に1〜12の数字を使えなかったりエクセル以外も取得できるのでまだ改良が必要そうです [] [ここ壊れてます]
754 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 23:30:15.25 ID:63usksBrx.net] >>732 ファイルの種類に関しては、ループ処理の冒頭でFSO.GetExtensionName(f.Path)の戻り値を調べて処理を分岐させるようにすれば、狙った種類のファイルだけを処理できるようになると思うよ
755 名前:デフォルトの名無しさん [2017/12/25(月) 23:37:14.60 ID:aEhB4dZD0.net] ググったのですがどうしてもわからないので教えてください 【環境】Windows10、Excel2010 【不具合症状】新規コードの作成ができない 新規bookを作成し、VBEを起動した際、通常はプロジェクトウィンドウに 「Sheet1-3」が表示されるかと思いますが、真っ白なまま何も表示されない状態です。 メニューの「挿入」をクリックしても、標準モジュールがグレイアウトになってしまい、 新規コードの作成が行えない状態です。 ITに相談しても初めての事例とのことでわかりませんでした。 コンパネからのofficeの修復も行いましたが改善されません。 マクロのセキュリティは「全て有効」で設定されています。 xlsm形式で保存もしてみましたがダメでした。 PC再起動も試してみました。 同一PCで、既存作成マクロの実行は行えます。 既存マクロのVBEを起動した際、プロジェクトウィンドウやコードウィンドウは 普通に見えますが、コードウィンドウで1文字でも編集すると、F5実行時に 「ファイルが見つかりません」とのエラーが出ます。ステップ実行でも同じです。 編集は例えコメント行でも同じエラーが出ます。 新規作成は全てにおいて不可です。 自動記録をしようとすると「マクロが記録できませんでした」とエラーが出ます。 マクロの作成ボタンは押せますが、押してもコードウィンドウが起動しません。 新規作成と編集が制限されているようなのですが、どこから変更するのかが どうしてもわかりませんでした。もしわかる方いらしたら教えていただけないでしょうか? スレチであれば、該当スレッドに誘導していただけると助かります。 よろしくお願いします。
756 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 01:59:52.47 ID:fIC/1lmja.net] >>734 エクセルのレジストリ削除してみてもダメ?
757 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 06:55:25.36 ID:cWcYrW8d0.net] >>734 そのマシンに新規ユーザーつくって現象が発生する? テンポラリやら消したら直るかもしれん あとセキュリティ対策ソフト切って試すとか
758 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 06:58:32.09 ID:gkP6o6Ks0.net] >>719 「01月」というファイル名のコピーが、「02月」として、同じフォルダに入れるのか フォルダ内に、「01月」「02月」があるとして、 この状態で、もう一度、同じ事をするなよ!w 設計として、同じフォルダに入れるのはおかしい。 異なるフォルダに入れるべき わかりやすいように投稿する時は、名前欄に、717 と入れてくれ
759 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 07:54:39.17 ID:6qOsufVw0.net] >>735 >>736 732です、レスありがとうございます。 最悪、officeの再インストールも覚悟しています。 レジストリかも?とはITには言われましたが・・・・ 新規ユーザーはまだ試していません。 セキュリティ対策ソフトはITの管轄なので、切れるかどうか不明ですが 聞いてみます。 こちらの書き込みは自宅からなので、次のレスが遅くなるかもしれません。 よろしくお願いします。
760 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 08:20:51.65 ID:upqov7ALa.net] >>737 運用の話までは管轄外じゃね あとは自分で考えりゃいいよ
761 名前:デフォルトの名無しさん [2017/12/27(水) 09:27:07.83 ID:58xyBvha0.net] >>721 とか>>732 とかのコードで意味わかんないところがいくつかある (コードが間違ってるって意味じゃなくて、こっちの知識が足りなくて理解が追い付かないって意味です) まず>>721 は なんでコレクションを宣言してるのか? しかもなぜ宣言したのに使わないのか? 変数eは何のために使ってるのか? ファイルのパスをsplitで分割してるけど、 ファイル名だったらinstrrevで\を探したほうが話が早いんじゃないか? 等々 >>732 は ループの中でdim使うのは大丈夫なの? 複数回宣言したらエラーになりそう 後、一番知りたいのが If strFolder <> "." And strFolder <> ".." Then これ、どういう意味なのか解説をお願いしたい (書いてる人たちにケチつけてるんじゃなくて、本当に分らない事を教えて欲しいだけです) どなたか教えてください、よろしくお願いします
762 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 09:45:06.41 ID:fOQst04i0.net] >>740 コマンドプロンプトで cd .. って打ってみたら判る c:>test>test1> cd .. 親ディレクトリに移動する。つまり親フォルダの事 「.」 は「.」 カレントフォルダの事
763 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 10:22:00.13 ID:fOQst04i0.net] 寝ぼけて書いてたからめちゃくちゃだな^^; c:\test\test1> というフォルダがあったとしてそこで c:\test\test1>cd .. と打てば c:\test> と親ディレクトリ(フォルダ)に移動する
764 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 10:45:52.46 ID:90Vjgj1Fa.net] >>740 ループ内でDimしてもエラーにはならないよ その都度メモリが割り当てられるだけじゃないかな フォルダ名の"."と".."は相対パスじゃなかったかな 一個上と二個上の親フォルダだったと思う 間違ってるかもしれないから調べてね
765 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 10:46:46.56 ID:90Vjgj1Fa.net] あ、間違ってたw .がカレントフォルダで..がひとつ上の親フォルダね すんませんな
766 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 10:48:05.37 ID:90Vjgj1Fa.net] あとsplitの問題に関しては読みやすさとか書きやすさじゃね 俺もよくやる 楽だからね
767 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 12:51:59.50 ID:u0gTyM9V0.net] beforeStr = "あ12月い" afterStr = beforeStr.sub(/\d\d月/) do |matched| month = matched.to_i + 1 month = 1 if month == 13 sprintf("%02d", month) end puts afterStr #=> あ01い Ruby で、文字列を置換した。 こういう処理は、Ruby が良い。 PowerShell でも作ってみたが、簡単な置換方法がなかった。 置換時に、コールバック関数を取れる、sub のような関数が無かった わかりやすいように質問者が投稿する時は、名前欄に、717 と入れてくれ
768 名前:744 mailto:sage [2017/12/27(水) 12:58:13.04 ID:u0gTyM9V0.net] 間違っていたので、修正した beforeStr = "あ12月い" afterStr = beforeStr.sub(/(\d\d)月/) do |matched| month = $1.to_i + 1 month = 1 if month == 13 sprintf("%02d", month) + '月' end puts afterStr #=> あ01月い
769 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 13:38:32.87 ID:lJNZ7xHQ0.net] VBA勉強し始めて間もない時に組んだマクロに replaceという名前のプロシージャを作りました そのことはすっかり忘れてたのですが、最近になってそのマクロを手直しする必要があって その中でReplace関数を使おうとしたらエラーが出る おかしいなと思い調べてみたらSub replace() を発見 プロシージャの名前を変えたら大丈夫かと思いきやなぜかどこかに何かが残っているようでエラーがでる 一旦そのモジュールを解放したらReplace関数は使えるようにはなりました しかし、なぜかReplaceと打ってもreplaceとなる replaceと打ってもそのままreplace replaceをReplace関数と認識してくれてはいるものの、どこかに何かが残っている 他のブックでは起きないのでまぁそれほど支障はないものの、もし分かる方いらっしゃったら どうすればいいか教えてください
770 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 13:47:19.08 ID:fCTi8N3va.net] Replaceで変数宣言してみ
771 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 15:20:29.55 ID:DW1nj5RcM.net] >>748 大文字小文字は、現在開いてるコード全体で統一されてしまうからな。 変数でもプロシャージャでもいいから、定義し直すと内部で覚えてる大文字小文字が上書きされるぽ この仕様のせいで、他人の書いたブック開いたまま修正保存するといつのまにか変わってたりする。 するとWinMergeとかでDIFFしたときにイラッ 独り言でした
772 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 18:43:06.62 ID:8Kp24ZKYM.net] プロシージャ外に書いたオブジェクトの寿命はいつまでなのでしょうか? グローバル変数にオブジェクトを保存してそれをfunctionで返すシングルトンオブジェクトを作ったのですが、 プログラムが一度終了して再度起動した際もオブジェクトが残っており、ゴミデータでエラーが起きています。 一度ファイルを全て閉じるまでは残るものなのでしょうか?
773 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 18:55:21.26 ID:K6GLaCg8a.net] >>751 グローバル変数ならエラーで止まるかブックが生きてる限りは生きてるんじゃね
774 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 19:03:21.38 ID:4eyrVwN9H.net] >>751 あとEndで止めると死ぬ
775 名前:デフォルトの名無しさん [2017/12/27(水) 20:23:28.17 ID:ry3vSREld.net] >>753 End なあ、せめて Class_Terminate()して欲しかった
776 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 20:40:54.92 ID:RyDVOJzS0.net] >>734 です。 officeの再インストール試してみましたが 不具合解消せずでした・・・・無念 幸い既存マクロは動くので、新規作成と実行は 他のPCでやることにしました。 不具合はExcelだけで、Accessでは特に問題ありませんでした。 一応ご報告まで。
777 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 20:55:52.26 ID:K6GLaCg8a.net] >>754 てか、マクロ終わったら初期化すりゃよくね? できない仕様なの?
778 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 21:08:27.21 ID:CubzVxEy0.net] >>756 マクロ終わったら誰が初期化するん?
779 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 23:24:01.01 ID:TIhBPqs40.net] >>755 マクロの記録から操作を記録すると 標準モジュール作成される?
780 名前:デフォルトの名無しさん mailto:sage [2017/12/27(水) 23:29:35.39 ID:0b7v1yOK0.net] >>753 Endだとなにがまずいのでしょうか
781 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 02:02:28.11 ID:uSnaEunu0.net] >>759 Globalで保持していると想定していた変数がいつのまにかクリアされていて想定外の動作をおこし痛い目にあったことがあります。 調べてみたら、エラー発生時またはEnd通過時にGlobal変数の寿命が尽きるようで、、 それ以来、Global変数もEnd Statementも避けています。 記憶が必要な場合は、Cell値やValidation値またはDocumentProperty等を使うようになりました。
782 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 02:45:31.50 ID:m7DZbaKUH.net] VBA初心者です 2つのセルがイコールになるように別のセルの値を変化させるというVBAソルバを作成したいのですが、エラーばかりで全く進みません・・・ 現在は7行目から10行目まで構文エラーが出ています。 どなたかご教
783 名前:願います・・・ Sub Solver() i = 1 Do Until i = 313 '------------------------------------------- Application.DisplayAlerts = False SolverOk SetCell:="K" & i, ByChange:="J" & i SolverAdd cellRef:=Range("K1:K313"), _ Relation:=2, _ FormulaText:=Range("L1:L313"), _ Application.DisplayAlerts = True '--------------------------------------------- SolverSolve i = i + 1 Loop End Sub [] [ここ壊れてます]
784 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 05:04:43.84 ID:BF7frMSQ0.net] >>749 >>750 ありがとうございました。
785 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 08:06:18.47 ID:VokPBxMja.net] >>757 マクロ終わったらオブジェクト破棄するんじゃダメなのかと言うことだが まあダメな使用なんだろうけど
786 名前:デフォルトの名無しさん [2017/12/28(木) 08:14:47.46 ID:ezpQ52SId.net] イミディエイトウィンドウにあるオブジェクトのことだよね
787 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 17:26:42.52 ID:GeC01ME+0.net] >>751 ,760 そもそもプログラムが終了ってどういう事をさしてる? ホントにプログラムが終了すれば、すべての変数の内容は失われるよ たんに実行するコードが無くなっただけではプログラムは終了していない Endはプログラムを終了させるけど、エラー出ただけでは終了するとは限らない デバッグで再実行や変数見たりできるのはプログラムは中断したけど終了してないから
788 名前:753 mailto:sage [2017/12/28(木) 23:10:38.77 ID:lWNTZScR0.net] >>758 753です。 マクロの記録そのものができないのです。 記録しようとすると「マクロの記録ができませんでした」と エラーが出てしまいます。 新規作成と編集が全て制限されているようです。 セキュリティは「すべて有効」で設定しており、 そこでの問題は無いと思うのですが・・・・
789 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 04:00:07.55 ID:G/qmS2zk0.net] >>761 "_" は次の行をつなげるためにつけたのだろうけど Application.DisplayAlearts = True の前の行にも "_" が付いているから 何か貼り付け忘れか、間違って削除してしまったものがあるのでは
790 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 04:08:47.98 ID:G/qmS2zk0.net] セキュリティーレベル一番高いとダメなんじゃね
791 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 07:22:34.45 ID:b/Z/hzqU0.net] >>734 あー、昔そんな事象に当たったことあるよ 原因は同じかどうかは分からんけど 俺の場合とんでもなく深い階層のフォルダに置いてたら VBEのシートモジュールが青く表示されてコードが作成できなくなった そのファイル、とりあえず浅い階層のフォルダや どこかのサーバに置いているなら クライアント側にコピーして内容確認出来る?
792 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 08:53:00.31 ID:JNsjSKSN0.net] 732、753です 皆様レスありがとうございます。 作成の不具合は、全くの新規Bookでも起こります。 既存マクロの場合は、コードの表示と実行は行えますが 編集が制限されています。 問題が発生してから、他のPCで新規作成したマクロを 該当PCで実行しようとしましたが、それはコードの表示すら できませんでした。ファイルサーバー経由とかではなく デスクトップ上に置いて実行しても同じです。 Accessでは特に問題ないので、VBAそのものではなく、 Excel単体の何かだとは思うのですが、皆目見当がつきませぬ。
793 名前:デフォルトの名無しさん mailto:sage [2017/12/29(金) 10:57:41.44 ID:MXSoKJ1y0.net] >>767 >>761 です 一部コピペして使ったので何か消してしまったのかもしれません・・・ 確認してみます、ありがとうございます。
794 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 12:22:18.46 ID:cGzM6pFo0.net] CreateObject("System.Collections.ArrayList")ってやったら .NETのArrayListがVBAで使えてしまったんですが これ隠し機能とかじゃなくて正式に使っていいんですよね?
795 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 13:25:09.57 ID:dKM8JRI70.net] 前にも話題に上がったけど .NETのほんの一部はVBAからも使える リファレンスにも書いてあったような気がする 他で代替できるのでArrayListをわざわざ使うメリットはないということで その
796 名前:ときは終わったと思う [] [ここ壊れてます]
797 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 15:32:35.43 ID:cGzM6pFo0.net] >>773 参考にします。ありがとうございました
798 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 15:33:00.15 ID:xXJ5T9Ia0.net] >>772 .Net Frameworkの機能でコンストラクタに引数を渡す必要のないものは使えるらしい >>773 ArrayListは各種メソッドが揃ってるからコレクションより使いやすいんじゃね?キーを使わないなら ただ遅いのがたまに傷
799 名前:デフォルトの名無しさん [2017/12/31(日) 01:12:29.94 ID:z2hgHR3O8] フォルダ(C:\print)内の複数のPDFファイル(ファイル名不規則)を、各々1頁目のみ連続印刷したいと思ってます。 VBAやコマンドライン初心者ですが、ネットで調べたところPDF xchange viewerのコマンドラインで1頁目のみ連続印刷する方法はわかりました。 しかし、下記のように各ファイルについてファイル名もパスも記載しないとダメなようでした。 PDFXCview.exe /print:pages=1 C:\print\123.pdf C:\print\abc.pdf VBAの方では下記のように*.pdfでファイル名必要なく連続印刷できますが頁指定の仕方が分かりません。 /tをとれば印刷ダイアログ開いて頁指定できますが、いちいち全てのファイルについて指定しないといけないので余り意味がありません。 何か良い方法がないでしょうか。 Sub pdf印刷() Dim strPath As String Dim strFilename As String Dim myShell As Object Set myShell = CreateObject("WScript.Shell") strPath = "C:\print" strFilename = Dir(strPath & "\*.pdf") Do While strFilename <> "" myShell.Run ("AcroRd32 /t " & strPath & "\" & strFilename) strFilename = Dir Loop Set myShell = Nothing End Sub
800 名前:デフォルトの名無しさん [2017/12/31(日) 08:34:16.68 ID:5sx4VZ0k0.net] >>774 Windows APIだって使えるんだぞ?
801 名前:デフォルトの名無しさん [2017/12/31(日) 08:58:37.79 ID:TXRnAgcd0.net] VBAの保存方法について バックアップどうしてますか? VBAのマクロだと戻る釦聞かないし、バグって復旧するとマクロの個所全部消えちゃうので2つくらいのバックアップを別ファイルでとってあるんですけど皆さんはどうしてますか? まだ素人なので思ったのと違う処理になって戻せなくなることがしょっちゅうあるので バックアップは大事
802 名前:775 [2017/12/31(日) 09:02:17.31 ID:TXRnAgcd0.net] >>778 戻る釦ってまるい矢印の奴ね
803 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 09:09:26.61 ID:PwPBZUwb0.net] >>778 バージョン管理システム入れてないなら同じになるでしょ。 俺も同じくでファイル名_Ver nnn.xlsmと言うかたちで3世代別フォルダに保存してるけど (時たま忘れたりする^^;
804 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 09:49:30.47 ID:aMifsa1T0.net] マクロ有りエクセルファイル自体にデータを入れて運用するのと、 データは別エクセルファイルにしてマクロ有りエクセルファイルでデータ入りエクセルファイルを操作するのと、 どっちがメンテナンスしやすい作り方だろうか? いつも悩んでしまう
805 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 09:52:29.70 ID:35C6Q16O0.net] アドインマクロにしましょう
806 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:06:17.25 ID:fsRyV04Q0.net] マクロのバージョン管理ってどうやってます? インポートファイルを分けすぎると不便なのでshareFanction見たいなインポートファイルに使いそうな関数全部入れてますが、初心者なもので開発中に関数の引数や戻り値を変えたくなるような場面が多々あり 今までのshareFanctionと互換性が保てなくなりますが、引数と戻り値を修正した関数以外でバグを潰したような関数は最新を使用したいです。 今はコピペで対応してますが
807 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:27:58.03 ID:rNrttlhS0.net] 個人なのか仕事なのか書かないと有効なレスがつかないのではないかな
808 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:34:47.18 ID:fsRyV04Q0.net] >>784 個人です 個人で開発、個人で使用
809 名前:ナす [] [ここ壊れてます]
810 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:36:51.05 ID:rNrttlhS0.net] >>785 ならGithubとSourceTreeで快適にできるんじゃないの? 俺も全然高度な使いこなしできてないけど楽ちんだ
811 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:55:17.97 ID:fsRyV04Q0.net] >>786 ありがとうございます ざっとみた感じソースファイルのバージョン管理はできそうですが、 例えばサーバーあるいはローカルマシン上にそのshareFanctionを使用している分散しておいてある場合、 それぞれのマクロを調べて更新したいファイルを選択、修正版マクロを適用する、 みたいな使い方ってできるんですかね?
812 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 11:57:21.02 ID:fsRyV04Q0.net] >>787 >>例えばサーバーあるいはローカルマシン上にそのshareFanctionを使用している分散しておいてある場合、 修正 shareFanctionを使用しているファイルが
813 名前:デフォルトの名無しさん [2017/12/31(日) 12:53:47.48 ID:TXRnAgcd0.net] ヴァージョンって仕事じゃないからいつから何時まででUP履歴にしたらいいかわからなん 機能変更したら必ずかもしれないけど、個人用だとやりながら変更しているからバージョン数が半端ないことになる。
814 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 13:10:06.47 ID:sYPUhsnja.net] バージョン管理は大変だよな インストーラーみたいなのつくってどうにかしようとしてるがうまく行くかわからん
815 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 13:25:39.05 ID:pVPyHW7p0.net] >>789 > バージョン数が半端ないことになる。 問題ないでしょ
816 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 13:31:04.61 ID:fsRyV04Q0.net] >>790 専用のソフトがなければ1sheetをマクロ関数管理用にして各関数内にver x.y.z(x変更で互換性無し、y変更で互換性あり、z変更は互換性ありバグ修正みたいにして) モジュールをインポートしたファイルをオープン時に、イベント検知で所定の管理ファイルを検索、新しいバージョンがあれば自動で今までのモジュールを解放、y,zバージョンが最新のファイルをインポート みたいにすれば実現可能そうですが結構手間がかかりそうで…
817 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 13:56:42.14 ID:hllNi94Va.net] マクロで書けよ。 バージョン管理。 セキュリティが低下するけどな。
818 名前:デフォルトの名無しさん [2017/12/31(日) 18:06:59.07 ID:nOUozIFo0.net] そもそも論として、たかがマクロでバージョン管理が必要になるような力作()作るなよw キミたちは一体エクセルマクロで何を築こうとしておるのかねw
819 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 18:13:51.04 ID:2b4EaTgg0.net] 仕事でVBA扱ってると色々な理由から小さいマクロでもバージョン管理が必要になってくる。
820 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 19:27:51.32 ID:rNrttlhS0.net] >>794 内容がぐちゃぐちゃになったら困るものにはバージョン管理が必要さ 力作()でなくても再構築はかったるいからな
821 名前:デフォルトの名無しさん [2017/12/31(日) 19:58:25.49 ID:nOUozIFo0.net] >>796 力作()じゃないのにぐちゃぐちゃになるってどんだけ当てずっぽうにマクロ書いてんだよw
822 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 20:00:31.71 ID:pVPyHW7p0.net] 社内に展開するとかでサポートが必要ならバージョン管理ぐらいは必須だろ >>794 は無知すぎ
823 名前:デフォルトの名無しさん [2017/12/31(日) 20:24:53.68 ID:nOUozIFo0.net] >>798 確かにおまえらの考える事は見当もつかんけどなw 別にいいや無能思考に明るくならなくてもw
824 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 20:28:42.31 ID:1PdKj8Yj0.net] またメゾット君か。
825 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 20:42:44.41 ID:rRjJbr8wx.net] メゾット君って雰囲気ですぐ分かるよね
826 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 20:54:32.08 ID:KnonKKai0.net] OLDフォルダにファイル名の後に日付つけたファイルをコピーしてる
827 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 21:20:00.26 ID:A+5By6dM0.net] ていうかバイナリファイルをバージョン管理システムに登録したところで 単なる時系列バックアップにしかならんうえに シートを更新しただけでバージョンが変わるから意味ないのでは
828 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 22:37:10.58 ID:rNrttlhS0.net] 力作2.0
829 名前:デフォルトの名無しさん [2017/12/31(日) 22:50:02.43 ID:InzisC8s0.net] 悩みはみんな一緒なんだね。俺はバージョンアップに悩んでアドイン化したが これはこれで悩ましいところがあるんだな。シートを初期化(つまりClearとかClearContents)する のにもよーく考えないと結構危ない。アドインはどのブックでも実行出来てしまうからPCに疎いヤツが使うのも考えると 別の方法を考えた方が良いんだろうかとか考えてる。
830 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 22:55:00.56 ID:rNrttlhS0.net] >>805 アドインてxlamのこと? だったらそのシートは一切使っちゃダメだよ プログラムモジュールだけの存在にするべき
831 名前:デフォルトの名無しさん [2017/12/31(日) 23:12:43.15 ID:InzisC8s0.net] >>806 そりゃ分かってるての。ブックを指定する時は「ActiveWorkBook」とするしかない(決めつけはよくないが) からよーく考えてコードを書かないと危ない場合もあるって話。使う連中の9割はマクロどころかシート関数も 知らないような連中なんだから。
832 名前:デフォルトの名無しさん mailto:sage [2017/12/31(日) 23:41:30.90 ID:rNrttlhS0.net] >>807 ・処理をスタートするFunction や Subはアドイン側にはない。当該Book側にある ・そのFunction や Subがアドイン側の機能を使う だとするとアドイン側に「ActiveworkBook」なんて書く必要はなくて、処理対象のSheetやRangeを 引数で受け取るだけになると思うんだがね
833 名前:デフォルトの名無しさん [2017/12/31(日) 23:52:05.59 ID:InzisC8s0.net] >>808 作業するBookはxlsxなんだよ。マクロはxlms側に書いてある。 なんでこうしたかというと、仕事柄、ブックは地方自治体に提出する場合があるから。 何の事かわからないだろうからもうちょっと書くと、測量データの野帳なんだよ。
834 名前:806 [2017/12/31(日) 23:53:24.81 ID:InzisC8s0.net] xlmsじゃねえや、xlamだな。
835 名前:デフォルトの名無しさん [2018/01/01(月) 04:27:25.57 ID:WDGj6QXoH.net] >>809 マクロ有効ブックから マクロ無効ブックを開いて処理して保存して閉じる という方法も有ると思う
836 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 09:37:05.14 ID:hnfikatx0.net] 自動処理したいなら>>811 だろうし、操作者が開いて何かしたいならメニューに追加しとけばいいだけだと思う >>809 は無知なのかちょっと頭固いんだろうな
837 名前:デフォルトの名無しさん [2018/01/01(月) 13:40:19.53 ID:iV2QIiO7H.net] >>812 作業ブック側にコード書けないんだよ。知ったかすんなよボケ
838 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 13:55:03.62 ID:7v1CUCWaM.net] >>813 作業ブックにコードなんか要らんだろ w 知らないなら黙ってろ てか、アドインでメニュー追加なんて基本中の基本だと思うが toshimana.hatenablog.com/entry/2014/01/26/204938
839 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 14:25:45.74 ID:7yffOGmB0.net] 知らないことを素直に知らないと言いなさい
840 名前: mailto:sage [2018/01/01(月) 14:27:07.60 ID:tZ/lpIQo0.net] 今年はいい年になるかなw
841 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 14:29:26.10 ID:UomJiKNZ0.net] >>814 Workbook_AddinUninstall てのは知らなかったな。 Workbook_Open するのと効果は違うんだろうか?
842 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 14:54:13.21 ID:ixsE+qrMx.net] またメゾット君が暴れてるな あの馬鹿が出入りするようになってから荒れすぎ
843 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 15:45:18.49 ID:bzNinO0Ma.net] >>817 よく考えろよ
844 名前:デフォルトの名無しさん mailto:sage [2018/01/01(月) 16:11:19.12 ID:PLRWaMeF0.net] >>819 おっと、 Workbook_AddinInstallを Workbook_AddinUninstallと書き間違えた
845 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 09:36:26.90 ID:nA397GZea.net] >>820 だとしてもだ イベントの言葉の意味そのままだよ よく考えろよ
846 名前:デフォルトの名無しさん mailto:sage [2018/01/02(火) 12:29:02.41 ID:MKa2S+Tjd.net] >>821 「対象のアドインを参照設定しているブックを開いた」というイベントを想定してた そうじゃないのね
847 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 10:57:08.56 ID:rhTFyGx/0.net] >>806 そんなことはない。 設定値を保存するためのiniファイルの代わりにするとか、テンプレートの代わりにするとか、使い道は沢山ある。
848 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 11:46:24.84 ID:ZpYRfYyG0.net] アドインにするにしてもなんにしても運用がしっかりされてないと意味がない ファイル名やシート名程度が保証されてないならマクロ化なんて諦めろ
849 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 11:59:35.70 ID:Uz65NhYa0.net] >>823 設定値を保存するのはやめたほうが良いと思うな。 バージョンアップしたときに設定値がリセットされてしまうとか、エクセルバグの巻き添えでブック破損の危険性がある。 できるだけアドインは読み取り専用で運用するべきだと思う。 過去に内部シートに保存するように作って問題が起きたので、バージョンアップ時にxmlにコンバートさせた事があるわ
850 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 12:49:50.09 ID:lLEkaf6s0.net] お前のバグを根拠にされてもなぁ
851 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 14:45:49.49 ID:hfgsKA7ma.net] まあ、設定は外出しにするのが普通に安全策じゃね? xlamのシートは明らかに利用してほしくないっていう思いが伝わる作りな訳だから
852 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 15:32:51.77 ID:00k1dN96d.net] 利用者が不用意にセルデータをクリアしてそのままセーブしても自覚すらしないかも
853 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 05:46:13.89 ID:UuI+tM4Q0.net] 質問よろしくお願いします。 A列,B列,C列,D列 Aa,111,bbb,20 Bb,111,aaa,30 Aa,222,bbb,10 Bb,111,aaa,10 Aa,111,bbb,15 上記の様な表を下記の様にしたいです。 A列,B列,C列,D列 Aa,111,bbb,35 Aa,222,bbb,10 Bb,111,aaa,40 A,B,C列の値が一致したらD列を加算して行を削除するという処理です。データは約1000行程です。
854 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 06:37:20.49 ID:MFccPkO20.net] 1000行程度ならSUMIFSとかでできるんじゃないの
855 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 06:55:39.59 ID:IcyEu6L/M.net] >>829 要件によるけどそういうビューを作ればいいんじゃね? create view V as ( select A列,B列,C列,sum(D列) as D列 from 表 group by A列,B列,C列 )
856 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 06:57:20.78 ID:IcyEu6L/M.net] すまん、寝ぼけててSQLスレと勘違いしてた... >>831 はなしで
857 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 07:39:39.14 ID:IGCyfMcU0.net] >>829 見るからにデータベース向けの案件 集計するキーとなる列が左端一列、その右に合計対象の数値列という2列形式なら データタブにある統合でできるんだが
858 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 08:01:11.56 ID:5mprgbRzp.net] >>830 すみません説明不足でした。 キー項目が1000種類以上あり、毎回CSVから読み込んでから処理をする為、事前にWorkSheet関数を作っておくのが難しい状況です。 何か手はありますか?
859 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 10:15:47.38 ID:fF+rBx/60.net] データベース系のデータは素直にデータベースソフトで管理しようよ・・・。 アクセスでやればマウス
860 名前:操作だけで終わる様な問題だよ。 [] [ここ壊れてます]
861 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 10:22:48.62 ID:d1LyNdol0.net] >>834 ADOでcsvファイルをデータベースとして接続して >>831 に挙げられた SELECT文を実行する、という手段がとれる
862 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 10:31:44.20 ID:no6Ylxj0a.net] sqlならselectとorder byだけですむ案件だな 愚直にプログラム組むと厄介だけどね
863 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 10:38:07.48 ID:7zx5w2nrd.net] ピボットでいいんじゃね
864 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 11:56:10.93 ID:iFN99ve4d.net] LINQって使えないんだっけ?
865 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 13:22:48.32 ID:Gj6t78kg0.net] >>829 嘔吐フィルターかけてソートしてから 一致を
866 名前:上からみて加算と消去 フィルター解除忘れずに(多分ソート直後にすぐ) [] [ここ壊れてます]
867 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 13:42:37.28 ID:hO93+Igl0.net] >>829 ↑ 上級者じゃない俺なんかこういうのみると 全部2次元配列にぶちこんでif多用して無理矢理やっちゃうんだけど そういうのはだめなの?
868 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 13:47:48.60 ID:cJgHrV+ta.net] >>841 だめじゃないし、初心者なら無理やりVBAで組むのも勉強になるよ 重複の無いリスト作るのがやや面倒というか、煩雑になりがちなところだな エクセルの機能使えばいいっちゃいいけど、好みじゃないな
869 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 13:55:27.88 ID:hO93+Igl0.net] >>842 おれこういうの無理矢理やっちゃうの大好きで完成すると充実感半端ない 俺が組むマクロってそんなのばかりだ 基本初心者レベルの知識しか使わないでやっちゃうんで、 こういう質問をする人は、無理矢理やると遅くなるとか別の理由があって聞いてるのかな? とか思っちゃう
870 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 15:19:59.75 ID:kPmYITG+0.net] ファーム1の中に、オプションボタンが18個あり、オブジェクト名を『OP_1』〜『OP_18』としてボタン1を押してフォーム2に切り替える時に選択されてるオプションボタンのキャプションを取得して変数TUR1に入れたいんですけどどうしたらいいですか?
871 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 16:20:08.23 ID:pGh8JphK0.net] >>844 For i = 1 To 18 With Me.Controls("OP_" & CStr(i)) If .Value = True Then TUR1 = .Caption Exit For End If End With Next
872 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 17:41:48.62 ID:uhyB+DSmd.net] 初心者なんだけど以下のような表から特定のセルに入力された場合だけ、特定のセルをカウントする方法ってありますか? Aは全て Bは選ばれたものだけ、みたいな Aの全てをカウントするのはわけないんだけど、Bの選ばれたものだけをカウントする方法がわからない IF使うにしても何を指定すればいいのでしょう? わかりにくかてすいません o.8ch.net/11r7r.png
873 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 17:54:54.38 ID:IwnGnNnba.net] >>843 普通にやり方がわからないんじゃないの >>846 cがキーになるなら重複しないcの一覧をつくって二次元配列でも構造体でもいいけどbがtrueならカウントするっていう風にすればいいと思う 件数多いならDBの領分だと思うけどね、この手の集計は
874 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:02:17.19 ID:HiTEnEcXd.net] >>845 ありがとうございます!
875 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:13:43.61 ID:uhyB+DSmd.net] >>847 Bがtrueなら、というのはどうやって指定すればいいですか? 範囲指定で
876 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:23:20.07 ID:uhyB+DSmd.net] すいません、間違えて書き込んでしまいました >>847 Bがtrueなら、というのはどうやって指定すればいいですか? 範囲指定でがっつりやると、指定した範囲に一つでもtrueがあるとカウントしてしまって結局全部をカウントしてしまうんです
877 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:27:59.94 ID:iMxAIJokM.net] >>829 何も難しく考えなくても、E列に=A&B&Cを入れて、E列を行ラベルにしてピボットテーブルで集計するだけで出来るよ。 ABC列をもどしたいならINDEX,MATCHで引っ張って来ないといけないけども、日々エクセル使ってる人なら手慣れたものだと思う。と言うか慣れておくと色々便利。 詳しい解説いるならする
878 名前:デフォルトの名無しさん mailto:sage [2018/01/04(木) 18:58:58.92 ID:IwnGnNnba.net] >>850 一行ずつループしてるんだよね? フラグ用に変数用意してるなら一ループごとに初期化し直さないとだめよ ってか、今どんなコードで動かしてるか書いてくれるとやり易いんだけど
879 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 02:37:52.28 ID:Uixpo
] [ここ壊れてます]
880 名前:pG00.net mailto: フィルタとCOUNTIFで良い気がするが どうしてもVBAでやりたいのか? [] [ここ壊れてます]
881 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 17:45:28.92 ID:Kfn/8I4m0.net] HTMLソースで <a href = URL1</a> <br />**** ← 4桁の特定の数字が入る <a href = URL2>予約中</a> <a href = URL3>[取消]</a><br /><a href = URL4>[訂正]</a> 上記の4桁の数字とURL以外同様のソースが全部で10個あるページがあり、C5セルに4桁の数字を入れ、それに対応したURL3のリンクをクリックしたいのですが、どうすれば可能でしょうか? IEでそのページまで飛ぶのは問題ないのですが、aタグのインナーテキストが4桁の数字以外共通なためForとGetElementsByTagNameとの組み合わせでクリックできないので何か手段があれば教えて頂きたいです。
882 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 21:06:25.46 ID:UyFZaUswa.net] >>829 そういう処理だったらソートしても問題無さそうだからソートしてループで良いんじゃね? >>854 4桁の数字以外共通だとどうしてForとGetElementsByTagnameとの組み合わせでクリック出来ないのかが分からん。
883 名前:851 mailto:sage [2018/01/05(金) 21:25:01.57 ID:Kfn/8I4m0.net] >>855 あ、確かに。書き間違えました。下記のコードだと10個のリンクのうち、一番上にあるやつをクリックすると思うのですが、 C5セルに入力した特定の4桁の数字の下にあるリンクをクリックしたいのです。 For Each obj In objIE.Document.getElementsByTagName("a") If InStr(obj.innertext, "取消") > 0 Then obj.Click Exit For End If Next
884 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 22:16:41.06 ID:vO88ak3C0.net] DOMに親要素とか隣の要素を見ていくのあったよね あれで必要なだけ移動させればいいんじゃね
885 名前:デフォルトの名無しさん mailto:sage [2018/01/05(金) 22:20:08.87 ID:vO88ak3C0.net] >>829 を >>836 の方法で頑張ってコードにしたのを書き込みたいんだけど 403になっちゃうのよね 禁断のコードが含まれているのかしら
886 名前:デフォルトの名無しさん [2018/01/07(日) 08:20:46.08 .net] >>846 VBAを使わずにExcelの計算式で書くとこうだよね。 ・C列が「10」、B列が「○」の行を数えるなら =COUNTIFS($C$2:$C$6,10,$B$2:$B$6,"○") ・C列が「10」、B列が空以外の行を数えるなら =COUNTIF($C$2:$C$6,10)-COUNTIFS($A$2:$A$6,10,$B$2:$B$6,"") これをVBAで書きたいなら、そのままワークシート関数を呼び出せばいい。 ・C列が「10」、B列が「○」の行を数えるなら With Worksheets("Sheet1") dblCnt = WorksheetFunction.CountIfs(.Range("C2:C6"), 10, .Range("B2:B6"), "○") End With ・C列が「10」、B列が空以外の行を数えるなら With Worksheets("Sheet1") dblCnt = WorksheetFunction.CountIf(.Range("C2:C6"), 10) - WorksheetFunction.CountIfs(.Range("C2:C6"), 10, .Range("B2:B6"), "") End With 注:COUNTIFS関数はOffice 2007で追加されたので、2003とかでも動くようにするには 計算式なら配列数式を使うかダミーの結合列 (例: F列に =B2&”:”&C2)を使う必要があるし、 VBAなら自前で1行ずつループするFor文を書く必要がある。
887 名前:デフォルトの名無しさん mailto:sage [2018/01/08(月) 01:12:41.23 ID:bgHHDE53D] >>856 すごい お馬鹿な返信で申し訳ないけど イメージとしてまず、 <a href = URL1</a> <br />**** ← 4桁の特定の数字が入る <a href = URL2>予約中</a> <a href = URL3>[取消]</a><br /><a href = URL4>[訂正]</a> の部分がページ内で繰り返して複数あるなら、この部分だけを取り出す処理を繰り返して splitなりで個数を数えて 処理するとか。(取り出す位置は、InStrで取って、終わり位置を 次の開始位置にして) その上で、この部分にC5と同じ値があるならクリックするとか。 C5の値を変数aにして、InStr(取り出した部分, a) > 0で良いような。 すいません。曖昧な返信で。
888 名前:sage [2018/01/11(木) 23:28:08.34 ID:kwmxLljDv] 教えていただきたいです。 あるセルの数字に関して o以下と12以上はA 6以上12未満はB それ以外はなしという式を作るとしたら =if(or(セル<0,セル>=12),"A",if(6<セル=<12,"B"," ")) という式ではちゃんと返ってきません。 正しい式をご教授願います。
889 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 12:40:04.91 ID:eKl5cJvJd.net] コンボboxを使ってサジェスト機能みたいなことをしたくて作ってみたんだけど、1文字目はうまくいくんだけど2文字目以降打つとリストの一番上が乗ってきて使い心地が良くないんだけど、どうしたらいいですか? コンボboxのリストのみをクリアするやり方もいまいちわかりません。 j=2 Tname.rist=array() set MstSht=worksheets(″マスター″) str_word=controls(″Tname″&j).value for i=2toMstSht.cells(rows.count,6).end(xlup).row if instr(ucase(MstSht.cells(i,6).value),ucase(str_word))=1 then controls(″Tname″&j).additem MstSht.cells(i,6).value end if next
890 名前:デフォルトの名無しさん mailto:sage [2018/01/11(木) 19:23:41.06 ID:WJjCr32Q0.net] エクセルの2003ですが、 並べて比較を使用した際にペアになっているブックと、 そのブックで表示されているシートを取得するには どのように記述すればいいでしょうか。
891 名前:デフォルトの名無しさん [2018/01/11(木) 21:16:23.66 ID:JbTpKTF6M.net] >>863 何を言っているのでしょうか?
892 名前:デフォルトの名無しさん [2018/01/11(木) 21:25:37.65 ID:a2sLbYI50.net] 世界教師マイトLーヤ「大暴落は日本からスタート」 rio2016.5ch.net/test/read.cgi/2chse/1512813686/l50 【マイトLーヤ】 米国債を売れ 【1200兆円】 https://medaka.5ch.net/test/read.cgi/eco/1515587891/l50
893 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 01:30:55.27 ID:GWvM9lig0.net] >>863 Excel2003はサポート切れてますので Excel2007にのりかえましょう
894 名前:デフォルトの名無しさん [2018/01/12(金) 01:41:04.62 .net] >>866 Excel2007なら>>863 できるん?(´・ω・`)
895 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 15:56:41.55 ID:kdQVxAch0.net] 0回目って何?
896 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 19:59:42.26 ID:8L8z7qJh0.net] vbModelessで開いたUserForm上のTextBoxにSetFocusするようInitializeに記述しても効きません これって無理なんですかね? vbModelessを切るとフォーカスがちゃんとTextBoxに移るんですけどね
897 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 23:20:03.95 ID:Ln5WwMFr0.net] 初期状態でフォーカスを当てたいなら UserForm.Show vbModeless UserForm.TextBox.SetFocus とフォームを呼んでいるプロシージャ側に書く フォームのイベントならActivateでどうでしょう 毎回フォームがアクティブになるたびフォーカスしちゃうけど Initializeがなぜはしらないのかは知らない
898 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 23:44:10.99 ID:Ln5WwMFr0.net] 実験してみたらInitializeは呼ばれてるけど SetFocusだけがだめみたい 他のことは普通にできる なんでしょうね
899 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 23:46:18.93 ID:WKndAwKhM.net] いやExsel 2007もサポート切れてますが
900 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 03:26:50.74 ID:0Hr8k8ED0.net] >>871 自分でもいろいろやってみたんですけどやっぱりダメみたいですね ありがとうございました
901 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 09:26:06.50 ID:60QkmGs40.net] 試してないけど、プロパティのTabIndexも駄目だったの?
902 名前:デフォルトの名無しさん [2018/01/13(土) 10:05:22.76 ID:8yN0Kzpj0.net] ThisWorkbook.Application.Hwndでブックのハンドルを取得して、 SetLayeredWindowAttributesで透過処理をする時、 LWA_ALPHAでは問題ないのに、 LWA_COLORKEYに変えると、なぜかブック全体ではなく、 シート上に最初に配置したコマンドボタンの方に誤爆します。 しかも、自分のPCでは問題ないのに、他人のPCだと誤爆するという意味不明さ。 ハンドルがずれる的なバグでもあるのでしょうか?
903 名前:デフォルトの名無しさん [2018/01/13(土) 10:12:39.30 .net] ウィンドウ表示時にフォーカス当てたいんならTabIndex=0にすればいいんだと思うけど、 あとはフラグを使ってInitialize直後のActivateイベントでフォーカスを当てればいいんじゃね? Private mblnInitFlag As Boolean Private Sub UserForm_Activate() If mblnInitFlag Then TextBox2.SetFocus mblnInitFlag = False End If End Sub Private Sub UserForm_Initialize() mblnInitFlag = True End Sub
904 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 10:19:25.53 ID:WLDq+ue70.net] 一つ目の表 A,B,C,D,E aaa,bb,cc,00,20 bbb,cc,dd,11,30 二つ目の表 G,H,I,J,K aaa,bb,cc,00,10 bbb,cc,dd,11,10 上の様な表があり、一つ目のABC列と二つ目のGHI列の値が一致すれば、二つ目の表の横にE列からK列の数値を引いた値を表示したい。 一致するデータが無ければ、一致データ無しと表示。 上の表だと2つ目の表の右列に、それぞれ10,20と表示。 データ量は300~800程です。 出来る方、よろしくお願いします。
905 名前:デフォルトの名無しさん [2018/01/13(土) 10:29:13.82 .net] >>875 LWA_COLORKEYは指定した色を透明にするんだから、 その他人のPCでExcelのウィンドウの色が違うんじゃね? 知らんけど
906 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 10:31:29.99 ID:uYJANG/vd.net] 既存プログラムで引数が多いやつを減らしたいんだけどどうすればいい? ただグローバル変数使うと他のアプリケーションに影響出るから使えない。 今から構造化やクラスにするのは名前変更が大変そうだし、同じ型でも同じ動作でもないからまとめにくい。
907 名前:デフォルトの名無しさん [2018/01/13(土) 10:39:42.82 ID:8yN0Kzpj0.net] >>878 それが、コマンドボタンとシートの色を同じにしても、 コマンドボタンの方だけ透過されるんです。 しかも最初に配置したコマンドボタンだけ。 2個目以降は変わらず。 透過の前後で、ハンドルの値をデバッグプリントしても変化ないですし。
908 名前:デフォルトの名無しさん [2018/01/13(土) 10:49:24.82 .net] >>877 2007以降限定でよければL列に計算式埋め込んじゃうけどね =IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し")
909 名前:デフォルトの名無しさん [2018/01/13(土) 11:20:55.87 ID:8yN0Kzpj0.net] ちなみに、こんなのです。 Sub test(ByVal Flg As Boolean) Dim Hwnd As Long: Hwnd = ThisWorkbook.Application.Hwnd Call SetWindowLong(Hwnd, -20, &H80000) If Flg Then Call SetLayeredWindowAttributes(Hwnd, 0, 200, 1) '←成功 Else Call SetLayeredWindowAttributes(Hwnd, 0, 200, 2) '←コマンドボタンに誤爆 End If End Sub 変えているのは最後の引数だけなんですが。
910 名前:デフォルトの名無しさん [2018/01/13(土) 11:27:43.02 .net] >>879 Sub test1() Dim args(5) As Variant Dim arg1 As String Dim arg2 As Long Dim arg3 As Variant Dim arg4 As Workbook Dim arg5 As Collection arg1 = "test" arg2 = 123 arg3 = ActiveSheet.Cells(1, 1) Set arg4 = ActiveWorkbook Set arg5 = New Collection arg5.Add New DataObject arg5.Item(1).SetText "sample" args(1) = arg1 args(2) = arg2 args(3) = arg3 Set args(4) = arg4 Set args(5) = arg5 Call test2(args) End Sub ‘ ―― Sub test2(ByRef args As Variant) Dim arg1 As String Dim arg2 As Long Dim arg3 As Variant Dim arg4 As Workbook Dim arg5 As Collection arg1 = args(1) arg2 = args(2) arg3 = args(3) Set arg4 = args(4) Set arg5 = args(5) Debug.Print arg1 Debug.Print arg2 Debug.Print arg3 Debug.Print arg4.Name Debug.Print arg5.Item(1).GetText End Sub
911 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 13:04:46.60 ID:WLDq+ue70.net] >>881 列の挿入や削除の処理があるので、数式だと参照ズレなどが起こってしまうので出来たらVBAで処理したいと考えています。
912 名前:858 mailto:sage [2018/01/13(土) 13:29:13.07 ID:eGapce6A0.net] >>866 Excel2010を用意しました。 >>864 エクセルで「Book1」「Book2」「Book3」を開いた状態で、 「Book1」「Book2」を並べて比較している時に、 ペアになっている「Book1」「Book2」を特定する方法、 もしくは「Book1」がActiveWorkbookの時に「Book2」を特定する方法が知りたいのです。
913 名前:デフォルトの名無しさん [2018/01/13(土) 13:42:21.62 .net] >>885 計算式でできればVBAでもそのままできるやん >>859 参照
914 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 13:47:55.56 ID:fyAvIt7m0.net] 並べて比較って 人間が何かを見比べて確認しているわけだから その作業は人間がやる必要ないとおもうので 全部VBAでバックグランドで処理すればいいのではないかと単純に思ってしまう 最後に比較した結果だけ表示してあげる
915 名前:デフォルトの名無しさん [2018/01/13(土) 15:21:57.51 ID:eGapce6A0.net] >>886 比較自体は計算式でできますが、 比較する対象を特定する事は計算式でできない気がします。 >>887 挿入等によって比較したい箇所がBook1と2で異なる可能性がある為、 事前に比較の起点となる箇所を選択する必要があります。
916 名前:デフォルトの名無しさん [2018/01/13(土) 16:53:07.70 .net] >>888 > 比較する対象を特定する事は計算式でできない 意味分からん =IF(COUNTIFS($A:$A,$G1,$B:$B,$H1,$C:$C,$I1)>0,SUMIFS($E:$E,$A:$A,$G1,$B:$B,$H1,$C:$C,$I1)-$K1,"一致データ無し") この計算式を単純にVBAに置き換えて With Worksheets("Sheet1") If WorksheetFunction.CountIfs(.Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) Then .Range(“L1”) = WorksheetFunction.SumIfs(.Range(“E:E”), .Range(“A:A”), .Range(“G1”), .Range(“B:B”), .Range(“H1”), .Range(“C:C”), .Range(“I1”)) - .Range(“K1”) Else .Range(“L1”) = “一致データ無し” EndIf End With 行列を変数で指定できるように.Rangeを.Columnsや.Cellsに置き換えて数値で指定できるようにして With Worksheets("Sheet1") If WorksheetFunction.CountIfs(.Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) Then .Cells(1,12) = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(1,7), .Columns(2), .Cells(1,8), .Columns(3), .Cells(1,9)) - .Cells(1,11) Else .Cells(1,12) = “一致データ無し” EndIf End With あとは必要なところを変数化してループを回せばいいじゃん Dim rngCell As Range Dim lngRow As Long ‘ ループを回すため行番号を変数化 With Worksheets("Sheet1") Set rngCell = .Cells(1, 12) ‘ 表の詳細仕様が分からないのでとりあえずK列が空じゃない限りループ続行 While rngCell.Offset(0, -1) <> “” lngRow = rngCell.Row If WorksheetFunction.CountIfs(.Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) Then rngCell = WorksheetFunction.SumIfs(.Columns(5), .Columns(1), .Cells(lngRow,7), .Columns(2), .Cells(lngRow,8), .Columns(3), .Cells(lngRow,9)) - .Cells(lngRow,11) Else rngCell = “一致データ無し” EndIf Set rngCell = rngCell.Offset(1, 0) ‘ 次の行 Wend End With 列の追加削除があるということだったら列番号も変数化すればいい
917 名前:デフォルトの名無しさん [2018/01/13(土) 17:00:25.96 ID:zzyV/8sb0.net] 初心者で申し訳ありません セルに入力した選手コードを選手名に置換するような動きをさせたいのですがどうするとよいでしょうか 別のシートに選手名簿は用意してありA列に選手コードB列に選手名があります
918 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 17:42:32.57 ID:8qhapkmN0.net] >>890 VBA要らん VLOOKUPでググれ
919 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 17:48:09.64 ID:8qhapkmN0.net] すまん「置換」を見落とした VBAは要るな WorksheetFunction.VLookup でやるなり、ループで検索するなりやればいい
920 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 17:50:29.11 ID:gLbKwyK9x.net] >>890 普通はセルに入力された選手コードをわざわざVBA置換するなんてことはしないで、VLOOKUP等のワークシート関数を書くけどね 置換操作をVBAで書かなきゃいけない理由はあるの?
921 名前:デフォルトの名無しさん [2018/01/13(土) 17:58:56.84 .net] >>890 >セルに入力した選手コードを選手名に置換するような動きをさせたい セルに選手コードを入力して、Enterを押した途端に選手名に置き換わるような動きをさせたいんだな?そうなんだな?
922 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 18:00:41.47 ID:gLbKwyK9x.net] >>892 検索置換のダイアログでシート内の選手コードを一括変換する、みたいな手作業の業務手順をそのままマクロ化しようとしているのかもしれないし、そういう場合はそもそもシートの設計や業務手順に問題がある場合が多い。 最初にVLOOKUP使えと指摘したあんたの感覚は基本的には正しいと思うぞ。
923 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 18:06:27.84 ID:fyAvIt7m0.net] >>890 単発ならワークシート関数でやった方が簡単 VLOOKUPで変換したのを用意しといてそれをごそっと上書きする 何回もやるなら、上記をマクロにする このくらいならマクロの記録でもいけそう 全部VBA上でやる方法もあるけどビギナーには大変でしょう こんな感じでいいんじゃなかろうか Dim i i = スタートする行 Do While Not Worksheets(1).Cells(i, 1) = "" Worksheets(1).Cells(i, 1) = WorksheetFunction.VLookup _ (Worksheets(1).Cells(i, 1), Worksheets(2).Range("名簿範囲"), 2, 0) i = i + 1 Loop シートのインデックスとかは書き換えてね 意味不明ならマクロ記録かさらなる修行をオススメする
924 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 18:07:34.63 ID:gLbKwyK9x.net] >>894 VBAに慣れてる人ならセル値の置換と聞いただけでワークシート更新イベントを使いたいのかなって思いがちだよな 俺も最初はそう思ったわ でも質問者の質問内容を推測抜きで素直に読むとそうとは限らないんだよな
925 名前:デフォルトの名無しさん [2018/01/13(土) 18:19:24.76 ID:zzyV/8sb0.net] >>893 トーナメントの結果を入力するようになっているのですが既に報告用ワークシートはあるのですが入力件数が多くなりすぎて最終的にはバーコードによる入力を試みようとしています また、その報告用ワークシートは書式が決まっており並べ替えエラーチェックのマクロが既にあるので行を入れたりして関数をいれる対応ができないという状態です >>894 入力後にマクロ実行用のボタンを押して置換するような想定でした エンターを押した瞬間変わるものでも大丈夫です
926 名前:デフォルトの名無しさん [2018/01/13(土) 18:35:21.45 ID:zzyV/8sb0.net] >>892 >>896 ありがとうございます 家に帰り次第試してみます >>895 今まではワークシート内から対戦選手の名前を探してきてコピーアンドペーストで対応していたのですが参加者が年々増えてきて(今年の見込みは約千人位)追い付かなくなってきたために速度向上を目的としています
927 名前:858 mailto:sage [2018/01/13(土) 18:44:45.15 ID:eGapce6A0.net] >>889 VBAに記述のあるWorksheets("Sheet1") の箇所を、 並べて比較でペアにしているシートに特定する方法が思いつかないのです。
928 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 19:03:27.44 ID:rZTV+Qsta.net] >>900 ファイル名とかシート名がランダムでないなら 固定値じゃないの? どんなファイル名か分からない、シート名か分からないってなら都度入力するしかないな。 データ形式で特定することもできるけど、 無駄な作業にしか思えない。
929 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 19:18:42.64 ID:gLbKwyK9x.net] >>898 こんな感じならどうかな 以下は、実行すると報告用シート内に含まれる選手コード全てを一気に置換する 複数の選手コードを含む場合も一発で置換できるはず 名簿にはコードの欄が空白の行がなく、名簿シートのA2セル以下に選手コードが入力されているものと仮定してる(A1は表見出し) セル値の一部が選手コードと一致する場合も置換されてしまうので、コードのみが入力されているセルの値だけを確実に置換したい場合、Replaceメソッドの引数のLookAt:=xlPart をLookAt:=xlWholeに変更してくれ Sub ReplaceCode Dim sh_list As WorkSheet '選手名簿シート Dim sh_report As WorkSheet '報告用シート Dim i As Long Set sh_list = WorkSheets("選手名簿シート") Set sh_report = WorkSheets("報告用シート") For i = 2 To sh_list.Range("A2").End("xlDown").Row sh_report.Cells.Replace What:=sh_list.Cells(i, 1).Value, Replacement:=sh_list.Cells(i, 2).Value, LookAt:=xlPart Next i End Sub
930 名前:858 mailto:sage [2018/01/13(土) 19:32:04.47 ID:eGapce6A0.net] >>901 ファイルのフォーマットが複数あるので、 事前にファイル名とシート名を規定できないのです。 なので、せめてペアにしたファイル同士が特定できれば、 ファイルとシートを選択する手間が省けると思ったのですが・・・ 3つ以上開けなくなるけど、workbooksからマクロブックを除外した先頭2つを比較する方法で考えてみます。
931 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 19:36:48.93 ID:6HVsHBKb0.net] >>903 それは運用を変えよう。機械的に処理するなら人間側が合わせる必要がある。 手動で命名規則に沿うか、命名自体を自動的にして人間が意識しないようにするか。
932 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 23:03:28.12 ID:aJN0Dby50.net] エクセル2010でCSVファイルを開いた場合、 UTF8やshiftjisを自動で判定して表示してくれますが、 この時に判定された文字コードを取得する方法はありますか。 用途は、外部データの取り込みでCSVを開きなおすための文字コードの特定です。
933 名前:デフォルトの名無しさん [2018/01/13(土) 23:14:29.83 ID:odSwvUdp0.net] >>905 application.nkf
934 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 23:28:32.80 ID:aJN0Dby50.net] >>906 ありがとうございます。 試してみます。
935 名前:デフォルトの名無しさん mailto:sage [2018/01/14(日) 06:58:25.18 ID:UVUQYwWb0.net] >>907 いいってことよ(´・ω・`)b
936 名前:デフォルトの名無しさん [2018/01/15(月) 01:08:16.65 ID:Zqan8uZj0.net] >>902 実行時エラー13 型が一致しませんとなっていて For~の行でエラーを出していて止まるみたいです あと報告シートが選手の強さ別に複数に分かれているのですが今選手コードの入力したシート(つまりいま開いているマクロ実行用のボタンを押したシート)を処理したいという場合どうするとよいのか教えていただけると助かります
937 名前:897 mailto:sage [2018/01/15(月) 01:48:08.96 ID:ubg4QImpx.net] >>909 エラーの出たコードを転載して見せてもらえませんか?こちらの環境ではうまく動いているんですが、私がコードを転載したときにミスをしたかもしれないので それから、コードはボタンマクロ(ボタン名_Clickのような名前のプロシージャ)として各シートのシートモジュールに書いているんでしょうか?
938 名前:デフォルトの名無しさん [2018/01/15(月) 11:28:57.27 ID:thpu0oBS0.net] >>910 Sub ReplaceCode() Dim sh_list As Worksheet '選手名簿シート Dim sh_report As Worksheet '報告用シート Dim i As Long Set sh_list = Worksheets("選手名簿") Set sh_report = Worksheets("対戦結果表_A級") For i = 2 To sh_list.Range("A2").End("xlDown").Row sh_report.Cells.Replace What:=sh_list.Cells(i, 1).Value, Replacement:=sh_list.Cells(i, 2).Value, LookAt:=xlPart Next i End Sub シート作成用のコードが既にあるのですがその中のコードを流用して各シートに実行用のボタンを置く計画でした ActiveSheet.Buttons.Add(2, 1.5, 125, 18.75).Select Selection.OnAction = "CSV_SAVE" Selection.Characters.Text = Worksheets(2).Cells(1, 1).Text & "級のCSVファイル作成" With Selection.Characters(Start:=1, Length:=15).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone End With これのCSV_SAVEをReplaceCodeにしてボタンの名前と場所をかえるつもりでしたがあまりよくない方法なのでしょうか 必要であれば既にあるコードを出しますので教えてください
939 名前:デフォルトの名無しさん [2018/01/15(月) 11:58:16.00 ID:Vljo7f2q0.net] >>908 application.nkf オブジェクトが見つかりませんでした。 下記のapplicationオブジェクト内にも、nkfプロパティが見つかりません。 https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/application-object-excel オブジェクトの参照方法が違うのでしょうか。
940 名前:897 mailto:sage [2018/01/15(月) 23:02:33.00 ID:JvjYqsKWx.net] >>911 申し訳ない、For
941 名前:フ行でEnd("xlDown")となってるの、自分の転記ミスでした エラーの原因もこれでしょう 二重引用符なしでEnd(xlDown)と書き直して動かしてみてください [] [ここ壊れてます]
942 名前:デフォルトの名無しさん mailto:sage [2018/01/16(火) 12:17:16.43 ID:SelV7zwId.net] 質問です。 ソルバーで普通は目的セルをrangeなどで指定しますが、シートのセルにアクセスせず、vba内の変数を直接ソルバーにかけてvba内だけで完結したいのですが、方法あるでしょうか?
943 名前:デフォルトの名無しさん [2018/01/17(水) 02:18:24.01 ID:x8yvrTsd0.net] >>913 うまくいきました ありがとうごさいます
944 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 12:24:27.92 ID:sSjH/Vu40.net] セルのA列にある文字列をコンボboxにaddですべて入れた後に、一文字入力する度に候補が絞られてくって出来ます? コード教えてもらえないですか?
945 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 12:31:05.83 ID:TVDu7Qf0r.net] 一文字入力する度にコンボボックスの候補を絞ればいいんとちゃうか? 知らんけど
946 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:28:17.12 ID:uuergXrf0.net] 社内に部品表があって、重複している名前を省いて部品種類一覧の表を作ろうと思ってます。 ・ネジM5 ・ネジM5 ・ナットM5 ・ナットM5 ↓ ・ネジM5 ・ナットM5 というイメージです。 自分なりに下記のマクロを組んでみました。 Dim row As Long, col As Long, D As Range col = 1 row = 1 Do Until Cells(row, col) = "" If Not Cells(row, col) = Cells(row + 1, col) Then If D Is Nothing Then Set D = Cells(row, col) Else Set D = Union(D, Cells(row, col)) End If End If row = row + 1 Loop この後レンジDをコピペするマクロです。 部品の種類が100とか200なら動いてくれますが、本来20,000件超の部品の種類があり、こちらを処理するとフリーズします。 デバックのウィンドウはユニオンのところを指定してきてるんですが、ユニオンにはまとめられる量の限界などがあるのでしょうか?
947 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:33:34.73 ID:wJgnfOTG0.net] >>918 Accessでやれ。
948 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:41:46.63 ID:CFAgCrzx0.net] >>918 ソートして重複を削除じゃダメなのか?
949 名前:デフォルトの名無しさん [2018/01/20(土) 15:03:19.74 ID:Fb/tMd6M0.net] >>918 Excel VBAでやってもいいけど、RANGEオブジェクトに溜め込むやり方よりは、素直に別シートに値をコピー、さらにそれを検索して別の値が出てきたら別シートにコピーでいいんじゃないのか? そもそもExcelのフィルタ関連の機能でもできるからVBAを使う理由がわからない。
950 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 15:06:48.01 ID:iefRLv2cp.net] >>918 dictionaryとかでだめかな?
951 名前:デフォルトの名無しさん [2018/01/20(土) 17:40:00.19 ID:91x3kJT10.net] DBMSがコンソールなんかに返した結果を Excelセルに上手く貼り付ける方法ってある?
952 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 19:41:33.47 ID:wJgnfOTG0.net] >>923 詳細忘れたけど代入する事で、そのまま貼り付けられるメソッドがあったはず。
953 名前:デフォルトの名無しさん [2018/01/20(土) 20:44:55.78 ID:Y9eKqT4m0.net] 多くは語らんけどある意味エスパーと言っておこうw
954 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 13:18:30.88 ID:+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 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 15:03:53.81 ID:pRI5Eg/X0.net] >>862 だれかこれわかる人いません?
956 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 16:45:39.61 ID:WhYlNzfJM.net] >>918 下手にマクロ組むよりExcelの標準機能の重複削除を使え。 VBAとは違って並列処理できるから速度が段違い
957 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 18:35:28.14 ID:7nwc0luUa.net] 重複なしリストはいろいろやり方あるけど、標準機能使うかadoでやるかがスマートだろうね dictionaryもありだけど、fsoのやつはなんか取り回しがいまいちじゃね
958 名前:デフォルトの名無しさん [2018/01/21(日) 18:40:31.69 ID:nVuQLEta0.net] ここ初心者スレかと思ってスレタイ見なおしてしまったわw オレ以外初心者しかおらんやんw
959 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 18:41:57.84 ID:EcNkRoqM0.net] メゾット君また寂しくなって来ちゃったのか
960 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 18:57:02.81 ID:7nwc0luUa.net] .netframeworkのlistって重複削除機能なかったっけ?
961 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 20:07:47.89 ID:+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 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 20:16:12.20 ID:rQmHQ7OM0.net] >>929 > dictionaryもありだけど、fsoのやつはなんか取り回しがいまいちじゃね 意味不明 Dictionaryとfsoになんの関係があるんだ?
963 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 21:00:25.33 ID:xouI7cQH0.net] >>918 とりま、Union関数は遅いから絶対に使うな、それだけ セル数がちょっと増えると簡単にフリーズする 普通に配列とかに入れてった方がいい
964 名前:デフォルトの名無しさん [2018/01/21(日) 21:12:55.02 ID:nVuQLEta0.net] >>935 とりま、なんでいきなりそれを言いだしたのかよく分からんが 遅いのはお前のプログラムが下手糞なだけ 脈絡のない下手糞自慢ごくろうさん
965 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 21:38:18.50 ID:Ycn/1JW20.net] require 'set' File.readlines("ファイル名").to_set.map { |item| puts item } Ruby の集合を使うと、以下のような行区切りのファイルを、 あ い あ あ う い 以下のような結果にできる。 ただし、集合にはデフォルトで、順番は無いので、 順番が必要なら、お好みの基準でソートする あ い う
966 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 21:51:29.18 ID:EcNkRoqM0.net] 毎度思うんだが、Rubyって他言語のスレにまで布教しに来なきゃならないほど不人気なのか?
967 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 22:19:18.53 ID:Ycn/1JW20.net] Ruby だと、テキスト処理が、めちゃめちゃ簡単に作れる 他の言語のように、悪戦苦闘しない
968 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 22:23:07.58 ID:+2jqUeqC0.net] どうせなら引っ越し準備も兼ねてPythonにしようゼ
969 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 23:23:35.81 ID: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 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 23:45:19.36 ID:Ycn/1JW20.net] 2万個のデータは、テキストデータだけなら、1MB ぐらいだろ >>937 のRuby でのテキスト処理なら、1秒ぐらいじゃないか?
971 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 00:04:49.43 ID:R+7srG110.net] >>942 空気読んでね
972 名前:アこはテキスト処理の質問スレじゃなくて Excel VBAの質問スレだから [] [ここ壊れてます]
973 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 01:20:01.78 ID:pYe1Cwj70.net] そんなに時間が掛かるのなら、一旦データをエクスポートして、 データをテキスト処理してから、インポートして戻せば? たかが、2万個のデータで、1時間は現実的ではない そんなに時間が掛かっても、どうしても、VBA でやりたいのか?
974 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 01:43:29.00 ID:zmIcszTc0.net] あくまでUnionを使った場合であって高速に処理する方法はいくらでもあるからなぁ。 それに仕事でVBA使う環境だと他社との協調も考えなきゃいけないからRubyインストールする方がよっぽど非現実的だし。 まぁ、たぶんおちょくってるつもりなんだろうけど、そもそもVBA以外の環境がないって前提のスレだから、 Rubyマンの煽りが煽りになっていないっていう・・・。
975 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 04:08:31.22 ID:Xp9Ai2fT0.net] 重複の削除はワークシートでやった方がてっとり早いと思う
976 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 04:38:17.99 ID:AE7SVx7N0.net] >>945 > そもそもVBA以外の環境がないって前提のスレだから そんな前提で質問に来る人もいるだろうけど、 「最適解」を求めている人が、とりあえずVBAだとどうなるか、と思って質問する場合もあるでしょ だから、質問者が「全体にVBA以外はダメ」って制限をかけていない限りは、 上でも、ACCESSを進めている人もいたけど、実用面から考えた回答も質問者の利益になると思うんだけど (質問者がそう思っていても、何も知らないからそう思ってるってパターンすらあり得るかな)
977 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 05:56:27.49 ID:zmIcszTc0.net] >>947 Excel VBA質問スレでの「実用面」は、一般的な企業向けWindows PC(Office製品入り)で出来る事に制限されると思うけど。 それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。 だいたい他の言語に興味があるなら、その言語のスレで質問すりゃいいわけだし、 どんな自己弁護をしたところで特定言語のスレで他言語の話をする理由にはならないよ。 せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、 Rubyスレに誘導して、そちらで話を展開すべきだね。
978 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 08:37:35.39 ID:AE7SVx7N0.net] >>948 > それに質問者が明言した事以外は「出来ない」と考えておくのが常識だと思うね。 リアルでも、相手に聞きもせずに勝手にそんな縛りをかけて要件定義する人はいないと思うよ > せめて質問者に対してVBA以外の開発環境は無いか訊ね、Rubyが使えるという自発的な回答が得られた時に初めて、 > Rubyスレに誘導して、そちらで話を展開すべきだね。 環境を聞くのは勿論ありだが、「○○だとより簡単にできるよ」ってこちらから言う事に何の問題があるのか? 今ある環境内で必ず実現する必要があるなら別だが、そうでない場合もよくあることでしょ ま、いずれにせよ、何も聞かないうちに勝手に「○○に違いない」って決めつけるのは、 要件定義では一番しちゃいけないことだよ
979 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 10:06:54.55 ID:zmIcszTc0.net] >>949 仕事している風を装いたいんだろうけど、明らかに経験が無いの丸出しなんだよな・・・。 そもそもVBAスレでRubyの話を出してくる事自体が問題なんだよ。 君が問題になっているのは要件定義の話ではなく開発環境の話だ。 明確な線引きをするなら、このスレではxlsmに記録し、特別な準備なしに実行できるものでなければ、何であれ許容範囲外だ。
980 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 10:12:50.46 ID:JFwvghX1M.net] またそうやって明文化されてもいない自分ルールを展開していくー
981 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 10:23:32.81 ID:zmIcszTc0.net] 明文化されてはいないけど、過去から今までのスレでの反応を見る限りは、 だいたいxlsmファイル単体でマクロの実行が補完できるかどうかが拒絶反応の出る出ないを分けてるよ。 ただ個別にマクロが記録された二つ以上のファイルを連携させる場合の話もあるから「xlsmに記録し、準備なしに実行可能な」と定義しただけ。 押しつけるつもりはないけど、この定義で問題が無ければテンプレに加えてキチ避けしてほしいくらい。
982 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 11:30:49.09 ID:r0T2WJT6a.net] >>934 ごめんscriptingRuntimeのやつ、の間違いだ
983 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 11:33:07.33 ID:y0jssaARd.net] VBAをメインとして他言語も補助的に使う。 それなりにあると思う
984 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 15:12:56.07 ID: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 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 15:25:33.05 ID:EwN8a0pa0.net] >>955 ですけど、KeyCode=40、つまり矢印キー下にセッティングして TextBox1から2に移ると頭にカーソルきますね ということは、入力した矢印キー右がTextBox2に移ったあとも生きててその影響が出てるってことですかね まぁ原因分かっても解決方法が分からないのですが
986 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 16:37:43.27 ID:DgxtyBXU0.net] 試していないけれど With TextBox2 の前に KeyCode = 0 を入れたらどう
987 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 17:07:09.72 ID:+/nnDvsjM.net] >>954 VBAでは書きにくい or 実行速度がめちゃ遅い かつ その言語なら簡単に書ける or 実行速度が速い ならありうると思う なのでAccessとかADOならまだわかるけどRubyはないな
988 名前:デフォルトの名無しさん mailto:sage [2018/01/22(月) 22:49:33.42 ID:EwN8a0pa0.net] >>957 しゅごい・・・できました ありがとうございました
989 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 10:46:16.37 ID:QE61Ho6h0.net] 。と。の間に入ってる文字を全部同じ文字に置換したい場合ってどうすればいいでしょうか? 。。 →。ccc。 。akok。 →。ccc。 。3293i9ia。 →。ccc。 みたいな感じです
990 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 11:16:56.30 ID:QE61Ho6h0.net] すいません数式の中の。と。の間の文字を置換でした
991 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 12:30:55.33 ID:4OtF4psx0.net] 数式の中のってのがよくわかんないから実際の数式を書いてくれ
992 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 13:09:34.71 ID:QE61Ho6h0.net] こういう事がやりたいって感じです わかりづらくてすいません =123456789(この9桁の数字はランダム) → =123ccc789 =123456789(この9桁の数字はランダム) → =12ccc3456789
993 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 13:24:33.86 ID:96uZKYcfd.net] >>963 。の話はどこへいったんだ?
994 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 13:52:49.81 ID:QE61Ho6h0.net] いやこっちの方がわかりやすいかなとw
995 名前:デフォルトの名無しさん [2018/01/24(水) 14:37:17.59 ID:626EYBnb0.net] 2週間くらい前から、 フォームコントロールのボタンを配置すると エクセルファイルの起動が いつもの起動時間の5倍くらいかかる様になり困っています。 ちなみに、新規のファイルでも同じ現象になり、 他のパソコンでも同じ現象になっています。 どなたか、解決方法を知らないでしょうか? 今使っている環境は Windows 10、バージョン 1709 Excel2016 バージョン 1712 です。
996 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 14:47:11.88 ID:LHEOU22dM.net] >>965 草生やしてんじゃねえよ真面目に質問しろ
997 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 16:00:42.34 ID:eVK1iV6m0.net] w
998 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 17:24:26.92 ID:QE61Ho6h0.net] なんでwなんて打ったのか・・・反省してます
999 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 17:48:11.23 ID:cTEKAhE2M.net] >>969 VBA 正規表現 置換 でググれ
1000 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 19:49:39.94 ID:4OtF4psx0.net] >>963 みんなこれでわかるの? 上と下に規則性があるように見えないんだが 上は値を置き換えてて、下は挿入してるよね
1001 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 20:02:49.35 ID:XHxrtrwiM.net] わかりません
1002 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 21:10:53.71 ID:6b5evSsja.net] >>918 そのテキストファイルがCSVファイルみたいにカンマ区切りで ヘッダとして項目名が付いてて項目名に重複が無ければ そのファイルにSQLぶん投げて結果セット取ってこれるんだけどなぁ
1003 名前:デフォルトの名無しさん [2018/01/24(水) 21:14:29.60 .net] 地道にループぶん回してFomulaLocalとInStrとMidしてちょ
1004 名前:デフォルトの名無しさん mailto:sage [2018/01/24(水) 21:29:25.29 ID:l13g0WQj0.net] いや、ループするにしても VbScriptingDictionary使うかCollection使って 値をキーとして登録して 同じキーがあれば無視、無ければ登録追加で 最後にその取っておいた内容を 展開するようにすればそこそこのレスポンスで 行けるんじゃないかな。 SQLで行けるならそれが最速だとは思うけど。
1005 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 19:41:38.87 ID:x0ph6Erf0.net] ちゃんとしたDBMSならともかく、エクセル表にSQL投げて実行速度が速いとか考えられんけど
1006 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 21:14:11.87 ID:xVw6nJl50.net] ADOだとそれなりに早いイメージなんだけど 実際はどうなのかね 誰か検証していてもよさそうだが
1007 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 22:04:13.28 ID:BYFi0PM80.net] 一項目だけの比較なんかだとVBAでやるのと変わらないけど、色々と条件が増えていくとSQLの方が速度が落ちにくい。 あと他の誰かが見ることも考慮すると、SQLで見えるようにしておいた方が分かりやすい。 ただExcelでSQLというのは絶望的に使いづらい。
1008 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 22:28:41.91 ID:3kW0jqmr0.net] UPDATEはできるけどDELETEができないんだっけ?
1009 名前:デフォルトの名無しさん mailto:sage [2018/01/25(木) 22:46:48.37 ID:2HN+h3+60.net] できなくてもやらなきゃいけない時があるんだよ男にはな
1010 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 10:16:15.47 ID:i1V2CYFLa.net] エクセルのテーブル機能ってどうなんよ あんまり使わんから馴染みないんだけどsql使いやすくなったりせんの?
1011 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 14:00:22.47 ID:ewTTza6/0.net] >>980 猫もだよ 穴に逃げた虫を懸命に取ろうとしている
1012 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 19:52:38.86 ID:uoysLyn50.net] こういうのを見ると 早くPython導入して欲しいって思うよな アンケート取られてたからちょっと入門見たけど結構面白いわアレ こういった集約的なことに関してもずっと楽に作れそう VBやC#でも後の方で覚えることになるラムダ式や イテレーターとかごく基本的な当たり前のこととして いきなり最初から出てくるし
1013 名前:デフォルトの名無しさん [2018/01/26(金) 20:26:28.69 ID:Vo+OzJVu0.net] VBAですら暴走しまくりのお前らにpythonなんか与えたら社会を困らす力作マクロ()がますます増えちゃうじゃんかw
1014 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 20:36:36.35 ID:VXa7znFt0.net] コードをまともに読み書き出来ないメゾット君が心配するような事でもないけどな
1015 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 22:00:17.36 ID:mlDN6tJ0d.net] VBAを廃止なんてできるわけないからPythonと入り乱れたプログラムになるんだろーか?
1016 名前:デフォルトの名無しさん [2018/01/26(金) 22:15:41.07 ID:pXxYwYu40.net] 職場の環境じゃVBAくらいしか選択肢がない
1017 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 22:23:52.83 ID:Ji/nweCn0.net] >>987 https://forest.watch.impress.co.jp/docs/serial/yajiuma/1097447.html
1018 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 22:40:51.06 ID:VXa7znFt0.net] 影響するのは最新バージョンだけだろうし、Excel版Pythonの初期バージョンだと使い物にならなかったり参考文献が少なかったりの問題で、 本格的に使われるようになるにしても五年以上かかりそう。そしてそこからさらに数年経たないと、そのバージョン使う会社が出てこなさそう。 っていうか今までもVBAをVB.Netへ移行させようとして失敗してたらしいし、AIブームに乗じた一時的なもんで実現しないんじゃないの。
1019 名前:デフォルトの名無しさん [2018/01/27(土) 00:23:34.40 .net] Pythonって起動にめっちゃ時間がかかるから(5秒くらい) 普段使いのちょっとしたツール作るには使い物にならないという印象
1020 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 00:36:59.48 ID:Xe+uGT7T0.net] 多分Python載ったとしてもしばらくはVBAと共存だろうとは思う。 勉強嫌いな爺さん達にはPythonが来るのは驚異以外の何物でもないかも知れないけど 導入されたら少なからず徐々に普及し始める。 なぁに、EXCELの中のコンパクトに纏まった世界の話だし 勉強するにはうってつけだと思う。 少なくとも今後のVBAよりは次に繋がるよ。
1021 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 01:00:30.81 ID:/Onm91iZa.net] 今まで言語を変えるような具体的な話は出てなかったからなぁ まさかObject指向言語じゃなくていきなり関数型言語が来るとはなぁ
1022 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 01:49:19.54 ID:mMQhkopa0.net] PythonはAIブームの収束と共に消えていきそうな雰囲気だから将来性っていうと疑問が・・・。
1023 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 08:00:53.71 ID:lEBNH3fnr.net] ツッコミどころ多すぎだけどとりあえずw オマエがギモンを感じるなw
1024 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 08:16:06.57 ID:ZgMGVzLO0.net] >>990 > Pythonって起動にめっちゃ時間がかかるから(5秒くらい) さすがにPC買い換えようよ...
1025 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 11:01:00.79 ID:Nudrd5lRF.net] Excel Python 質問スレ mevius.2ch.net/test/read.cgi/tech/1517018055/
1026 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 14:29:11.91 ID:arqbrGPuM.net] VBAがくっそ使えない言語だから普通はpython大歓迎でしょ…
1027 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 15:20:10.85 ID:cbFXqoc10.net] VBA嫌いじゃないけど、Phythonの方が明らかにエレガントなコーディングできそうだから歓迎しかないわ VBAは参照設定したら使える程度のものになるんじゃないか?
1028 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 15:44:26.54 ID:+7hAxrT3a.net] どんな言語だってできる奴はできる。 VBAが駄目だとか言う奴に限って碌なコード書けない奴ばかりなんだよなあ。
1029 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 16:05:43.43 ID:arqbrGPuM.net] こんな書いててストレスマッハの言語はないからな まあ全員パイソンいくでしょw
1030 名前:デフォルトの名無しさん [2018/01/27(土) 16:11:26.72 ID:3QIsbpwxM.net] VBA→javascript→Pythonの順に覚えたけど何がそんなにストレスなのかよく分からん
1031 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 17:39:06.57 ID:Xe+uGT7T0.net] それより次スレは?
1032 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 19:59:27.66 ID:QIG/4o8/0.net] >>998 パイソンやとスレで相談したいときに 質問スレではインデント崩れて悲惨なことになってるな
1033 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 20:30:03.5
] [ここ壊れてます]
1034 名前:6 ID:Xe+uGT7T0.net mailto: とりあえず次スレ立てておいた Excel VBA 質問スレ Part52 http://mevius.2ch.net/test/read.cgi/tech/1517052305/ >>1003 Pythonはスコープがインデントで決められているからね インデントの重みが他の言語のそれとは全く違う 代わりにEnd IfやEnd Subみたいなものがない [] [ここ壊れてます]
1035 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:07:33.55 ID:845Tmzax0.net] >>1004 乙 1000ゲット
1036 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 80日 10時間 41分 3秒
1037 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています