17/12/16 04:53:47.87 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:デフォルトの名無しさん
17/12/16 04:54:06.08 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:デフォルトの名無しさん
17/12/16 04:56:00.08 kSf4Qz7z0.net
>>558
環境情報が抜けていました。
Win10 バージョン 1703 (OS ビルド 15063.786)
577:デフォルトの名無しさん
17/12/16 05:17:34.49 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:名無し
17/12/16 05:26:07.46 j6rMoAMF0.net
そういうときは、doeventsやwaitも試してみるべし
今パソコン無いから試す暇がない
579:デフォルトの名無しさん
17/12/16 05:36:15.74 kSf4Qz7z0.net
>>563
そういえばDoEventsは試しました。
結果効果はなく、SendKeysを無効化して現象回避もできなくなるという逆効果も確認しました。
Waitはどこに入れると効果的ですかね。
間にStopを入れて一時停止したりはしてみましたけど、、、
580:デフォルトの名無しさん
17/12/16 05:45:39.73 kSf4Qz7z0.net
>>563
今回のはあまり待ち要素はないと見ていますが、以下の3カ所に2秒ほど入れてみました。
・シート切替の前後、.ShowPopupの直前
再現してしまいました。
581:デフォルトの名無しさん
17/12/16 18:57:10.19 9cn7Nun80.net
現在vbaをネットで勉強中ですが書籍も使って勉強しようと思っています
プログラミング初心者がvbaを学ぶのにお勧めの書籍を教えていただけませんか?
582:デフォルトの名無しさん
17/12/16 20:17:51.76 7KC6Lrbda.net
VBAで書籍は金の無駄だよ
最初はマクロの記録を見るのとネットでぐぐれば大抵のことはできるよ
583:デフォルトの名無しさん
17/12/16 20:36:50.77 IU5B3eEvp.net
データの入力規則にカンマ区切りの項数不定の1-9の数字のみを許容したいのですが、どうすればよいですか?
正規表現だと、こんな感じです。
/^([1-9]+,)*([1-9]+)$/
regexp使ってVBAでチェックする方法ならやり方が分かるのですが、セルのデータ入力規則で設定する方法が分かりません。
584:デフォルトの名無しさん
17/12/16 20:57:31.30 yaHEvAoH0.net
>>568
シートのChangeイベントあたりに
そのコードを仕込んでおくのはいかがでしょうか
ダメな場合はエラーメッセージ出して、セルの値を消しちゃえば
入力規則チックになるかと
585:デフォルトの名無しさん
17/12/16 21:10:04.55 yaHEvAoH0.net
>>566
本格的にやりたいなら、VBAと関係ないように思えるけど
「スッキリわかるJava」シリーズをオススメしたい。
自分の場合、VBA本ではさっぱりだったけど、この本で目覚めた。
オブジェクト指向の解説は、VBAの理解にもかなり役立つ。
プログラミング言語は根幹は同じで、方言みたいなもんなので
他の言語にもすんなり入っていけるようになる。
やれることが多くなるよ。
586:デフォルトの名無しさん
17/12/16 21:57:56.42 0LU2hdfpp.net
オブジェクト指向をVBA始めて1週間だが理解してみた
まず
変数は何かの型に入れる
お前はこれしかできねえよ
っていう
そして
その型の中のさらに型の中の命令はなに?
と掘り下げて行く
これがオブジェクト指向
587:デフォルトの名無しさん
17/12/16 22:19:01.15 vwwP6eCQd.net
>>571
違うけど気にしないでいいよ
厳密なな定義ないから
588:デフォルトの名無しさん
17/12/16 22:21:35.33 6cm/hyEb0.net
あと一歩というところだな、実にオシイと言っておこう
しかし始めて1週間でそこまでオブジェクト指向の真髄に迫るとは大したものだ
末恐ろしい奴が現れたもんだ、これは俺もうかうかして居られんな
589:デフォルトの名無しさん
17/12/16 22:26:05.73 vwwP6eCQd.net
なるほど
俺が間違っていたようだ
590:デフォルトの名無しさん
17/12/16 23:09:21.00 9T+lJsLD0.net
お、おぅ
591:デフォルトの名無しさん
17/12/16 23:16:38.47 jWdcz3p90.net
Access だと、ずいぶん前から SendKeys は使うな ってのが喧しいが
Excel だと現役なんか? いいんか?
592:デフォルトの名無しさん
17/12/16 23:32:07.04 oxEVVuR00.net
>>558
(その5)
画像リンクが外部ファイルにある場合はSendKeysも役にたたないようです。
なんかいい回避策ないですかね?
593:デフォルトの名無しさん
17/12/17 01:01:58.50 ZCl426tV0.net
たんにActiveCellのシートが思ってるものじゃないだけの気がするなぁ
そのコードどこに書いてるんだよ
594:デフォルトの名無しさん
17/12/17 01:39:41.36 F05u2uwp0.net
誰がオブジェクト恥垢やねん!(´・ω・`)b
595:デフォルトの名無しさん
17/12/17 04:46:14.88 Hjh32hjm0.net
>>578
どゆこと?
例えばですね、他Bookにある画像をクリックしてそこにPopupが表示され、フィルタ処理を選びます。
で、フォーカスは対象テーブルのあるブック・シートに遷移して、フィルタリングに成功します。
SDIなので画面上は呼出元ブックとテーブル用ブックが2つ並んでおります。
ここでScriptは完了するわけですが、追加の操作をするために、遷移先シートを明示的に選択。
明らかに自分はその目的のシートを選んでいます。
ここでImmediateから、ActiveCell.Address(external:=True)をたたくと明らかに今触っているセルの番地が、Book名、シート名、セル番地名のフルパスで戻ります。
ここでカレントセルのある範囲を選択反転してCopy操作を行うと、呼出元ブックの同じセル番地がコピーモードの破線矩形にかわるんです。
カーソルで下へスクロールすると、呼出元シートもリモコンで操作しているみたいに一緒にスクロールするんです。
削除操作も、、、、同一ファイルで操作している時は気づかなかったですが、別ファイルから行うと凄いびっくりなビジュアルが展開されます。
明らかに "ActiveCell" という状況が表と裏に分離されたような状態になるんです。
同じブックをWin7+Excel2010で操作した場合は起きません。
自ファイルだとSendKeysで逃げられるんですが、外部ファイルからシート切替しても呼出元が切り替わってしまって、、
テーブル側ブックがキー操作相当でシート切替されないとこの状態が解除されないみたいです。
596:デフォルトの名無しさん
17/12/17 05:09:02.50 /bdPdb8E0.net
>>580
とりあえずActiveSheetとかSelectionとか使わない方法で実装するのはダメなの?
あと同時に実行されるマクロは全て同じブックに入れておくべきだと思うよ。
597:デフォルトの名無しさん
17/12/17 06:51:48.24 Hjh32hjm0.net
>>581
(その6)
Debug用と問題回避のためにActiveCellを記述していますが、実際のコードでは使用していません。
>>560のSelectionはコードの中に記述しているわけではなく、検証用の画像ボタンを登録する手順としてImmediateから実行しているだけです。極力BackEndから操作する派です。
実際の運用Bookでは極力同一ファイルにMacroを集めています。
Macro自体は仕事を完全に全うするのですが、、、そのあとシートの状態がおかしくなるという現象です。
状態を解消するには、呼出先のBookでシート切替を行う方法のみ。
で、発想を変えて、「外部から制御できないか」と考えました。
VBE内にVBSScriptを記述し、「中の外」からシート選択してみようと。
結果NG、再現してしまいました。
じゃあ、本当に外から制御すればどうかな?と思い、上記のVBScriptを同一フォルダに置いて呼び出す作戦に。
598:デフォルトの名無しさん
17/12/17 06:52:33.95 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:デフォルトの名無しさん
17/12/17 06:55:18.78 Hjh32hjm0.net
>>583
あれ、一部書き間違えました。実際は、、
Call Shell("wscript " & ThisWorkbook.Path & "\SelectSheet.vbs", vbHide)
600:デフォルトの名無しさん
17/12/17 10:32:12.89 e1NNF66l0.net
つまりここでは
なんの型にはめるのか?
命令は?状態は?
だろ?
でもCellsってプロパティだろ?なんで一発で状態から入るんだ?
601:デフォルトの名無しさん
17/12/17 11:20:01.90 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:デフォルトの名無しさん
17/12/17 11:21:03.68 ZjZyIyTi0.net
>>586
訂正
CellsはRangeオブジェクトだ
そしてWorksheetオブジェクトやRangeオブジェクトのCellsプロパティでもある
603:デフォルトの名無しさん
17/12/17 11:26:43.28 e1NNF66l0.net
>>587
cellsはrange?
意味わからない
プロパティでオブジェクトってなに?
もっとうまく説明してくんね?
604:デフォルトの名無しさん
17/12/17 11:27:13.71 gZkjaYao0.net
>>586
自分用語を使うどころかコードも正確にコピペできてないからそのまま実行しても無駄だぞ
エスパー力を全力で働かせて察してあげない限り回答しても罵倒が返ってくる
605:デフォルトの名無しさん
17/12/17 11:37:53.28 ZJu/+/V0x.net
>>585
メゾット君、プロパティだから状態というのは間違えやすい考え方だからこの際捨て去った方が良い
プロパティは呼び出し元プログラムに対してオブジェクトのクラス内部への変数へのアクセスを提供するもので、アクセス先の変数のデータ型はプリミティブな値であることもあれば、何らかのオブジェクトである場合もある
というか、オブジェクト式の途中で出てくるプロパティは全てオブジェクトへの参照を提供するプロパティだ
Cellsの場合はRange型のオブジェクトへのアクセスを提供するプロパティだが、Grobalのメンバプロパティだから上位オブジェクト式を
606:省略して書けるわけ
607:デフォルトの名無しさん
17/12/17 11:46:44.41 gC8RO3PCp.net
>>590
カタカタ使うな
608:デフォルトの名無しさん
17/12/17 11:53:12.87 ZjZyIyTi0.net
>>589
そうだよな・・
自分でクラス作ってみれば一発で理解できそうなものだが・・
609:デフォルトの名無しさん
17/12/17 11:59:28.64 R4ec2g2Bx.net
>>592
あの質問者が自分でクラスを作れるようになるのって何年か先の話だろうな
610:デフォルトの名無しさん
17/12/17 12:11:00.98 gC8RO3PCp.net
クラス?
オブジェクトに必要な要素を全部埋め込むやつだろ?
もうできるよ?
でもnewクラスの使い方が意味がわからない
同じクラスで(中身も同じ)なら作る意味ないんじゃねえの?
611:デフォルトの名無しさん
17/12/17 12:19:09.45 ZjZyIyTi0.net
確かにこれでは何年も先の話になりそうだ
612:デフォルトの名無しさん
17/12/17 12:31:47.04 gC8RO3PCp.net
いま、クラスをみてみた
そしたらworkbookの中にworksheetsがプロパティとしていた
どういうことだ?
俺はVBAの盲点をついたか?
613:デフォルトの名無しさん
17/12/17 12:40:07.47 gC8RO3PCp.net
知りすぎたか?
614:デフォルトの名無しさん
17/12/17 12:51:28.57 gC8RO3PCp.net
dim i as long
For i = 2 To i.Cells(.Rows.Count, 1).End(xlUp).Row
このi.cellsの意味がわからない
教えてくれ
615:デフォルトの名無しさん
17/12/17 13:07:40.63 +CY9tzJPd.net
プロパティは内部変数へのアクセスに限らずいろんなこと出来るし、最初さっぱり理解できなかった。
まさかただのシンタックスシュガーだなんて想像してなかったからな。
616:デフォルトの名無しさん
17/12/17 13:23:13.67 R4ec2g2Bx.net
>>598
このコードは絶対にコンパイル通らないぞ
For i = 2 To i.Cells(.Rows.Count, 1).End(xlUp).Rowの意味なんてこっちが知りたいくらいだ
617:デフォルトの名無しさん
17/12/17 13:26:02.12 R4ec2g2Bx.net
>>596
Worksheetオブジェクトのメンバの、Worksheetsコレクションにアクセスするプロパティじゃん
何が不思議なの?
618:デフォルトの名無しさん
17/12/17 13:27:44.67 R4ec2g2Bx.net
New出来てないの笑える
クラスモジュールを挿入できただけでクラス使えるようになってねぇじゃん
619:デフォルトの名無しさん
17/12/17 13:51:38.17 5yg/jtY20.net
おそらく本職プログラマじゃなく事務の効率化でVBAに手出したんでしょ?
どうせ片手間ならプログラミング適性無さそうだからおとなしくコピペで済ますのが無難だと思う
たぶん永久に理解出来ないよ
620:デフォルトの名無しさん
17/12/17 14:08:08.04 gC8RO3PCp.net
>>600
正しいのはなに?
URLリンク(i.imgur.com)
621:デフォルトの名無しさん
17/12/17 14:15:19.48 R4ec2g2Bx.net
>>604
自分で考えろよ、クラス作れるんだろ?w
622:デフォルトの名無しさん
17/12/17 14:17:42.01 KxwCW4kM0.net
最近オブジェクト指向の本読んでみたんだけど
これまで作ってきた稚拙なスパゲティコードをこの際書き直してみたくなった
623:デフォルトの名無しさん
17/12/17 14:25:27.85 R4ec2g2Bx.net
>>603
この人謙虚じゃないし、まぁ無理だろうな
素直に他人の文章やコードが読めず、自分の言語感覚だけで無理矢理白黒つけようとするだけの奴はそもそもプログラミングに向いてない
624:名無し
17/12/17 19:27:22.86 ZjZyIyTi0.net
>>606
今書き直しても、しばらくするとまた見識が増えて書き直したくなるだけやで
625:デフォルトの名無しさん
17/12/17 19:31:24.74 SRQ89yzu0.net
>>606
やめとき、もう一つ稚拙なスパゲティコードを作るだけやでw
魔道に堕ちた亡者どもはそれをリファクタリングと呼んでるらしいがなw
626:デフォルトの名無しさん
17/12/17 19:52:14.28 /bdPdb8E0.net
>>607
メゾット君は>>573の自演の通り、「○○が出来るなんて凄いヤツだ」って反応が欲しいだけでしょ。
その反応が欲しいだけだから本腰入れて勉強するつもりもないんだろうし、
彼の想像の中では、自分は「凄いヤツ」であり、それに反応する周囲は「凄くないヤツ」なので見下している。
見下している奴らと�
627:ゥ分の意見がぶつかったら自分の方が凄いので自分が正しい。だから自分の考えに固執する。 要するにヒカルの碁とかハイキューとかボールルームとかの主人公みたいな展開を妄想してんだろ。 どんな反応をしても彼の妄想に付き合わされるだけだし、妄想が維持できなくなると死ね死ね言うだけになるから構うだけ無駄。
628:デフォルトの名無しさん
17/12/17 20:35:35.89 oSmkXHksa.net
>>607
プログラミングだけじゃなくありとあらゆることに向いてないだろうな
わからんのは仕方ないけど、最低限の態度がなってない
ネットだからなにやってもいい、って考えのやつはいずれリアルでもぼろが出るわ
629:デフォルトの名無しさん
17/12/18 00:39:13.70 mfb75Iey0.net
プロシージャにconstでいくつか定義してあってこれまで何も問題なく動いてきた
さっきその定数の一つを=22から=23に変更したら
定数式が必要です、のエラーが出る
どうみても何も問題ないようにみえて分からない
まさかと思いつつ
'Const sht_right As Integer = 23
Const sht_right As Integer = 23
このように問題の起きた行をコメント行として
すぐ下に書き直したらエラーがでなくなった
こういうのってあるもん?
630:デフォルトの名無しさん
17/12/18 02:00:09.91 rupxZ3Ov0.net
>>612
上の奴、本来のコードだと全角スペース入ってなくね
631:デフォルトの名無しさん
17/12/18 02:32:05.22 m7yapXyd0.net
>>604
i.cells じゃなくて ws.cells
さらに、with ws が有るので ws が省略できるから
.cells で良い
632:デフォルトの名無しさん
17/12/18 03:17:17.83 7TDAIkSx0.net
>>612
99%は単なるタイプミス
等幅フォントでスペースが明示できるテキストエディタにコピペしてみる
633:デフォルトの名無しさん
17/12/18 06:23:46.35 TbHEuMcS0.net
どこかから、コピペした文字列に、見えない制御文字が入っているとか?
634:名無し
17/12/18 07:46:18.89 fX+okHt3M.net
>>612
その事例は見たことないけど、納得のいかないエラーが出たときは、とりあえずエクセル再起動
635:デフォルトの名無しさん
17/12/18 07:59:26.09 mfb75Iey0.net
>>613
>>615
>>616
と俺も思った
んで何度も打ち直してみた
ちなみに上に貼ったのはそのままコピペしたもの
2を3にしただけなんでね、よくわからん
>>617
再起動しなかったかもしれないんでまた起きたらやってみるわ
コメント行にしたもともとの行は削除しちゃったんで実験できなくてすまん
636:デフォルトの名無しさん
17/12/18 08:01:30.70 aXpCltYZ0.net
Constでエラー出した事あったけど、Endを実行してからやったら治ったことあるな。
値が記録されたままだったとかじゃね。
637:デフォルトの名無しさん
17/12/18 10:33:59.62 ueSdYdZDa.net
>>612
なんか、Enumでもそんなことがたまに起こるよ
VBEのバグらしいけど
638:デフォルトの名無しさん
17/12/18 13:34:10.63 NqlVCppnp.net
VBAってどうやったら上達しますか?
エクセル関数は達人級です
エクセル関数みたいに慣れだけじゃ無理ですかね
639:デフォルトの名無しさん
17/12/18 13:43:31.23 IKrWJ0B8a.net
>>621
Javaを勉強したらvbaも上達するよ
640:デフォルトの名無しさん
17/12/18 13:47:42.85 NqlVCppnp.net
>>622
JAVA押しさんこんにちわ
641:デフォルトの名無しさん
17/12/18 14:03:31.64 yddZnfruM.net
Java推しはともかく他の言語を学ぶのはVBAの上達にも実際かなり役立つ
642:デフォルトの名無しさん
17/12/18 14:45:58.67 c1zJrPAZp.net
(またメゾットくんだよ…)
643:デフォルトの名無しさん
17/12/18 16:14:09.20 D45Nh6pha.net
>>623
ジャワティーの話しはしてないんだ、ごめんな
644:デフォルトの名無しさん
17/12/18 16:30:46.07 NqlVCppnp.net
VBAだけやればいい
javaは環境が大変だ
したいこともないし
645:デフォルトの名無しさん
17/12/18 16:48:04.05 D45Nh6pha.net
プログラムの上達に早道はないんだよなあ
というか、遠回りに思えることが早道だったりする
と、自戒の意を込めて
どうしてもエクセルと絡めたいならC♯でもいいけどな
646:デフォルトの名無しさん
17/12/18 16:49:17.57 7XOqOvzzd.net
今のうちにPythonを学ぶ
URLリンク(www.publickey1.jp)
647:デフォルトの名無しさん
17/12/18 17:57:32.74 pW3jV0rpa.net
ぱいそんってアメリカではもっともメジャーなスクリプト言語なんだっけ
648:デフォルトの名無しさん
17/12/18 18:15:03.66 fX+okHt3M.net
何故にPythonかと思ったらエクセルにPython組み込むって話が出てるんだな。勉強するか‥
649:デフォルトの名無しさん
17/12/18 19:14:05.94 /veb4c2e0.net
>>628
自己評価だとそう感じるのかもしれないけど
できる奴は最初からできるし、できない奴はいつまでたってもできない
プログラムってそういうもん
650:デフォルトの名無しさん
17/12/18 19:34:37.55 pW3jV0rpa.net
>>632
そりゃあ人によっちゃ違うが、それは才能があるからで近道しようとしてそうなってる訳じゃないだろ
わかんないことがあったら別の切り口から攻めると言うのもありじゃないの
651:デフォルトの名無しさん
17/12/18 19:45:01.61 au4G9Tq20.net
VBAerさんついに終わるのか
Pythonに駆逐されちゃうね
652:デフォルトの名無しさん
17/12/18 19:45:05.21 /veb4c2e0.net
>>633
ないとは言ってないよ
俺が言いたいのは、別の切り口から攻めようが近道しようが
既知の問題の解決策は知識として身につくが
未知の問題に対する解決能力は上げることができないって事
つまり上達とか意識しないで楽なやり方ばかり選ぶ奴がいつだって一番賢い
653:デフォルトの名無しさん
17/12/18 19:51:30.63 pW3jV0rpa.net
>>635
天才の人は苦にしないだけでちゃんと道は通ってるよ
654:デフォルトの名無しさん
17/12/18 19:54:37.06 /veb4c2e0.net
>>636
何を言いたいのかよくわからんがそもそも俺が言ってるのは天才のことじゃない
単にプログラムができる奴とできない奴の話なんだが
655:デフォルトの名無しさん
17/12/18 19:57:32.60 pW3jV0rpa.net
>>637
iqないとダメなのはプログラムに限らんし
まあスレチだから退散するわ
656:デフォルトの名無しさん
17/12/18 20:01:42.20 /veb4c2e0.net
>>638
いやだからIQとかの話じゃないってば
目の前の問題をありのままに受け入れる事ができる奴と
既に自分の中に構築された知識に当てはめないと解釈できない奴の違いだって
657:デフォルトの名無しさん
17/12/18 23:11:06.58 aXpCltYZ0.net
>>634
仮に採用されて皆がPython触るようになったら、今度はPython(笑)って扱いされる未来が見えるわ。
格好つけだけでやってる奴らが抜けて、AIとか作ってる真っ当なのが風評被害を受けそう。
言語は統一するよりも、それを扱うユーザー層毎に分けた方がいい。
658:デフォルトの名無しさん
17/12/19 12:28:53.96 /mb664F4a.net
>>618
俺も似たようなの見たことがある。
でも引きずるような問題じゃ無かったと思う。
Excel再起動かPC再起動で直るんじゃね?
659:デフォルトの名無しさん
17/12/19 12:37:10.24 pfZPHd/La.net
>>635
逆だと思うが。
未知の問題に対しての解決能力は上げることができる。
楽なやり方を選ぶ奴は上げられないだけ。
厳密には未知な問題といっても既知の問題と全く違うわけじゃない。
660:デフォルトの名無しさん
17/12/19 16:48:29.82 mNLh8c+i0.net
ここのやつらがあんまジャバジャバいうから引っ張り出して着たわ
とりあえずコードは実行せずにパラ読みしようと思う
URLリンク(i.imgur.com)
661:デフォルトの名無しさん
17/12/19 17:01:17.86 Bngslooy0.net
>>643
「わー、ロレックス持ってるなんてすごーい!」
「え?こんなの普�
662:ハだよ。持ってないとかwww」 みたいな展開になる事を期待してるんだろうけど腕時計の入れ方が無理やり過ぎて笑いしか出てこないw 本は中古屋で買ったみたいだし、あまりにもちぐはぐ過ぎてむしろ格を下げてるようにしか見えないんだが。
663:デフォルトの名無しさん
17/12/19 18:14:51.58 J+VWEpvK0.net
>>642
うんだから最初に言ったんだけど自己評価だとそう感じるんだってば
664:デフォルトの名無しさん
17/12/19 19:02:39.42 mNLh8c+i0.net
JAVAの本でわかったこと
変数の宣言と同時に値を入れることを初期化という
変数の値が変わらないことを定数という
いま10ページ目だけどこんくらいだわ
665:デフォルトの名無しさん
17/12/19 19:57:29.94 9tP52mqX0.net
>>646
>変数の値が変わらないことを定数という
これはちょっと違うのでは?
666:デフォルトの名無しさん
17/12/19 20:25:43.13 fLKwjLgZa.net
>>645
お前の自己評価がそう感じてるだけだろw
何か自分はプログラム書ける気になってるようだけどw
667:デフォルトの名無しさん
17/12/19 21:14:28.27 4AWSTK/ra.net
変数の初期かもなんかむずむずする理解だな
668:デフォルトの名無しさん
17/12/19 21:15:04.92 4AWSTK/ra.net
あ、でも彼はジャワティーの話をしてるのか
ならわからんでもない
669:デフォルトの名無しさん
17/12/19 21:26:16.08 mNLh8c+i0.net
javaのパスが通らなくて実行できない
助けてくれ
670:デフォルトの名無しさん
17/12/19 23:45:33.30 jfHXMkXp0.net
Java は環境構築が難しいから、初心者には無理
paiza.IO, codepad などのサイトで、ブラウザから実行しろ
671:デフォルトの名無しさん
17/12/20 00:20:41.41 USwfdD4Y0.net
別にJavaが難しいと感じたことはないな。
すっげえ昔にかじっただけだから今となっては初心者以下だけど。
いや、当時も初心者だったけど。
672:デフォルトの名無しさん
17/12/20 00:28:51.85 USwfdD4Y0.net
コンパイラもJavaで出来てるからJava実行環境でコンパイラ動かして、そのコンパイラへの引数にエディタで編集中のテキストを一時ファイルにしたものを渡してたな。
そのエディタもJavaで誰かが作ったものを機能拡張したやつだったな。
673:デフォルトの名無しさん
17/12/20 00:40:50.45 xfg3gakwa.net
コマンドラインが敷居高いならeclipseでやれ
敷居高いつっても環境変数設定してそこにパス通すだけだがな
674:デフォルトの名無しさん
17/12/20 01:00:50.98 sohN4awK0.net
javaって効率悪すぎだろ
テキストエディタで編集
↓
名前つけて保存
↓
コマンドプロンプトでコード入力
↓
実行
どんだけ時間かかるんだよ
675:デフォルトの名無しさん
17/12/20 08:24:00.28 TZHE5kKsa.net
いやeclipse使えよ
676:デフォルトの名無しさん
17/12/20 09:28:33.38 FRuTBLwYp.net
これ以上はスレ違いなのでJavaスレでどうぞ
677:デフォルトの名無しさん
17/12/20 09:36:49.97 GPFg9WZwx.net
eclipseも知らないで手動でコンパイルしながらブチキレてるの想像してワロタ
道は遠いね
678:デフォルトの名無しさん
17/12/20 12:25:53.38 Vi8ViNgtd.net
スレチ
679:デフォルトの名無しさん
17/12/20 12:41:32.07 /dU/ndoRa.net
お前ら良かったな
EXCELでPythonが使えるようになるかも知れないんだって?
あれはObject指向の流れを組む関数型を目指しているところの言語っていうからやりがいはあるよね
俺もVB.NetやC#はやったけど
EXCELに載ることが確定したらこれからPython覚えるわ
まぁ構造化言語からObject指向型言語に移行したとき
めちゃくちゃ苦労したけど
今回も苦労するんだろうなぁ
680:デフォルトの名無しさん
17/12/20 13:38:58.93 /fbzm/vOa.net
Pythonはさらっと概要見たぐらいだけど面白そうだね
まあexcelにのらなくても勉強して損にはならんだろうな
681:デフォルトの名無しさん
17/12/20 15:31:22.90 EAMpcVD20.net
必要ないもん勉強したって時間のムダだっつーの
真のエ�
682:Nセルマクラーだったらマクロ書くのにパイソンしか使えなくなった時に必死でググれ
683:デフォルトの名無しさん
17/12/20 16:07:26.91 /h7jUJynd.net
今のままでも関数型で出来るらしいが
URLリンク(qiita.com)
684:デフォルトの名無しさん
17/12/20 18:29:06.12 khkAeR460.net
Pythonはオブジェクト指向も関数型も全部後付けって感じでイケてねえ
F#にしとけって
でもこんなのはプログラマ以外が触るものだからしょうがないのかもな
685:デフォルトの名無しさん
17/12/20 19:00:00.85 sxNo8wqUa.net
>>665
F#ってまだ生きてんのか!
686:デフォルトの名無しさん
17/12/20 19:51:25.83 7WhairgWd.net
生きてるし、活発に使われてるよ
ソースはない
687:デフォルトの名無しさん
17/12/20 20:52:44.38 EAMpcVD20.net
ソースはないソースはよ
688:デフォルトの名無しさん
17/12/21 23:06:47.24 1PuX0k7mM.net
100列ぐらい続く計算エクセルがある
足したり引いたりするだけのエクセル。
酷くね?VBAにできないものか
689:デフォルトの名無しさん
17/12/22 02:00:09.18 T3zOnX2zx.net
>>669
計算エクセルっていう表現が意味不明だが要は計算用のワークシートのことか?
大抵の場合、ワークシート関数とテーブル機能を組み合わせて何とかする方がVBA使うより楽だぞ
車輪の再発明をしてもしょうがないからな
690:デフォルトの名無しさん
17/12/22 04:21:53.41 0EXQoFbJ0.net
質問です。
Excel側からVBE上の指定のプロシージャ記述欄にジャンプする動作をVBAで記述できる
でしょうか?
やり方がわからずとりあえずSendKeysを組み合わせて動作するようになったのですが
不慮の事故が起きそうで怖いです。
VBEのオブジェクトモデルに沿ったアクセス方法があれば教えていただけないでしょうか。
691:デフォルトの名無しさん
17/12/22 07:49:35.63 BCzwPGy5d.net
>>671
VBE上でカーソルの位置をコントロールするってこと?
692:デフォルトの名無しさん
17/12/22 11:50:10.85 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:デフォルトの名無しさん
17/12/22 12:58:52.19 7Q1lZFEo0.net
>>671
自己解決しました。
キーワードを英語に切り替えてGGったら、StackOverFlowですぐ見つかりました。
.CodePane.GetSelection
.CodePane.SetSelection
あたりでなんとかなりそうです。お騒がせしました。
694:デフォルトの名無しさん
17/12/22 17:40:48.08 3J82DkVga.net
VBAやりはじめて三年ぐらいだけど、For Eachで普通の配列もループできるの今日知ったわ
コレクションだけだと思ってた
695:デフォルトの名無しさん
17/12/22 18:05:37.66 /KqbyaeQd.net
>>675
値の取得だけで設定はできないけどねー
696:デフォルトの名無しさん
17/12/22 18:16:05.21 3J82DkVga.net
>>676
クラスの扱いが大分変わるのよ
わざわざイテレータ自作してたわ
697:デフォルトの名無しさん
17/12/23 00:05:26.91 /nzAEvVba.net
>>674 できるんだけどセキュリティ的に問題だからお勧めしない。 .netで書いた方が良いぞ。 でもVBEを操作するコードが書ければ、.net上でも殆ど同じコードでいけるから勉強しとくと良いかな。
699:デフォルトの名無しさん
17/12/23 06:34:44.47 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:デフォルトの名無しさん
17/12/23 06:43:21.92 F3cHZlpp0.net
>>679で書き忘れ
標準モジュールの宣言部に
Public Const VK_LBUTTON = &H1
の記述もしてあります。
701:デフォルトの名無しさん
17/12/23 07:46:11.28 8SavP0Th0.net
>>679
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then Target.Value = "ここ"
End Sub
クリックした場所に入れるだけならSheet1モジュールにこれで済むけど、コルーチン処理が必要というなら分からん。
いずれにしてもActiveCellとかActiveSheetとかは避けて設計すべき。
702:デフォルトの名無しさん
17/12/23 07:56:20.90 F3cHZlpp0.net
>>681
自分もググってたどりついた先がそれだったんですよね
でも常に発動してる状態だとやっぱり困るんですよ
一応application.enableevent を使って停止しておくこともできるようなので、
通常は停止しておくことも考えてはいます
設置したボタンを押したときだけ機能するようにしておけばいいのかな、と。
Worksheet_SelectionChange使う以外方法がなければそうするしかないですが
無効にしてる間はイベントが一切反応しなくなるという事なので、
イベント付きの他のブックを併用するようなケース等で問題が起きそうで迷ってます
703:デフォルトの名無しさん
17/12/23 08:00:18.36 8SavP0Th0.net
>>682
なら
If ToggleButton1.Value Then
とか加えておけばいいだけでは?
704:デフォルトの名無しさん
17/12/23 08:11:12.55 F3cHZlpp0.net
>>683
お・・これはいけそうです
こういう使い方があるんですね・・・
作業を先に進められそうです
ありがとうございました
705:デフォルトの名無しさん
17/12/23 10:35:36.95 oVsH3Gmz0.net
フォームコントロールボタンの文字の色を変えたいんだけど
セレクトしない方法はないのですか?
Sub test01()
n = Worksheets("Sheet1").Shapes("Button 1").Name
Worksheets("Sheet1").Shapes(n).Select
Selection.Font.ColorIndex = 3
End Sub
706:デフォルトの名無しさん
17/12/23 10:51:51.14 YCHexesv0.net
フォームコントロールボタンの文字の色を変えたいんだけど
セレクトしない方法はないのですか?
Set n = Worksheets("Sheet1").Shapes("Button 1")
n.Font.ColorIndex = 3
みたいな?
707:デフォルトの名無しさん
17/12/23 13:25:10.14 Zcbsqwvta.net
シート上のボタンならtoggleにしなくてもモジュールレベルのクリックフラグ変数で管理できねーか?
708:デフォルトの名無しさん
17/12/23 13:35:38.33 8SavP0Th0.net
>>687
出来合いのものを、わざわざ回避する利点は?
709:デフォルトの名無しさん
17/12/23 15:32:28.22 tRk+L7lt0.net
>>688
いや、最初コマンドボタンだったからコマンドの方がいいのかなって思っただけ
別に必要無いなら必要無いでいいし
710:デフォルトの名無しさん
17/12/23 18:23:21.18 3q2JAS6ba.net
>>686
逆に何でセレクトしなきゃならんのかが分からん。
普通セレクトなんてしないだろ。
711:デフォルトの名無しさん
17/12/23 18:24:04.16 3q2JAS6ba.net
すまん。
>>685向けね。
712:デフォルトの名無しさん
17/12/23 19:38:10.94 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:デフォルトの名無しさん
17/12/23 19:53:54.32 AF0984djx.net
>>692
直感的な説明だが、オブジェクトがオブジェクトを持つという表現は間違い
オブジェクトが持つのはあくまでメソッドとプロパティからなるメンバで、いわゆる下位オブジェクトにはメンバを介してアクセスしてるだけだからな
714:デフォルトの名無しさん
17/12/23 20:15:31.85 oVsH3Gmz0.net
>>692
マクロの記録でやってたので。1行で可能なのですね。
TextFrame.Characters.Font.Colorでググったら出てきました。
ありがとうございました。
715:デフォルトの名無しさん
17/12/23 20:55:59.08 afY4COyy0.net
ちなみにButtonsとかCheckBoxesとかは隠しプロパティ
ヘルプにもでてこないからな
なんで隠してあるのかねぇ
716:デフォルトの名無しさん
17/12/24 00:26:44.47 oSJcOqyea.net
>>694
分かるよ。
そういう人がとても多いから。
でも、殆どの処理はセレクト無しで書ける。
個人的にはセレクト無しで書けない場合でも何とかセレクトせずに書けないかを考える。
717:デフォルトの名無しさん
17/12/24 00:45:00.70 BN72T8jr0.net
まあ、大多数の用途では得られるメリットが少なすぎてSelectを消す意味は薄いけどな
718:デフォルトの名無しさん
17/12/24 01:23:50.46 2PxYmIQzx.net
オブジェクトのプロパティにアクセスする処理でSelectメソッドはなるべく使わない
コードの実行中にデバッグ作業を行ったときなどに予期しないオブジェクトが選択されて、アクセスしたいプロパティにアクセス出来ずエラーになることがよくあるからね
Rangeオブジェクトを指定していたはずがShapeオブジェクトやOLEObjectオブジェクトを選んでいたりとか
719:デフォルトの名無しさん
17/12/24 01:43:15.08 O2udkTbW0.net
Selectは必ず代替手段があるから、範囲選択してユーザーに注意を促すとかでなけりゃSelect使う事に疑問を持った方がいい。
720:デフォルトの名無しさん
17/12/24 06:22:03.30 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:デフォルトの名無しさん
17/12/24 08:15:14.57 BN72T8jr0.net
>>700
別窓かどうかの判定が抜けてる
LocationNameとかLocationURLあたりを調べないと
722:デフォルトの名無しさん
17/12/24 11:59:50.98 uwQxUsVy0.net
IEが複数あるかもしれないのに見つかったら抜けちゃうコードで何かおかしいと感じないの?
723:デフォルトの名無しさん
17/12/24 15:06:20.77 6Phr71Y20.net
Dim u As Long
Range("A1", "I5").Value = u
u = Round(u, 4)
四捨五入したいのに全部ゼロになる!
724:デフォルトの名無しさん
17/12/24 15:18:15.83 CcW1Sn5Aa.net
>>703
uには何が入るの?
725:デフォルトの名無しさん
17/12/24 15:18:38.84 CcW1Sn5Aa.net
てか、そりゃゼロになるだろw
726:デフォルトの名無しさん
17/12/24 15:27:49.11 dho/ilxra.net
何かが逆でワロタ。
727:デフォルトの名無しさん
17/12/24 15:36:05.76 6Phr71Y20.net
>>704
A1からI5のセルを桁指定したいんだ。
どうすればいいか教えてくれ
728:デフォルトの名無しさん
17/12/24 15:53:02.16 sjlc/tcta.net
>>707
A1からI5の範囲に初期化したばかりのu(=0)を入れてる。
入れるのは逆で、入れた後で桁変更して戻す必要もある。
最初からuを使わずに自分自身に桁変更した自分を入れる方が普通かな。
そもそも見た目だけ桁指定する方が一般的だと思うが。
729:デフォルトの名無しさん
17/12/24 15:54:56.74 CcW1Sn5Aa.net
桁指定したいならexcel vba 書式設定
でググりなさい
730:デフォルトの名無しさん
17/12/24 15:56:16.29 CBEBXlX2a.net
というか、値が複数(配列)だから一発でいけないだろ。
731:デフォルトの名無しさん
17/12/24 15:56:53.27 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:デフォルトの名無しさん
17/12/24 16:09:57.86 U3mSSLWjx.net
>>711
数式書き込んでるループ内の処理の右辺を
"=$B" & i & "-" & "$C" & i
にするだけ
折角行インデックスをiで指定してループ回してるんだから使わないと
この程度のことだったらVBA使わなくても組み込みのテーブル機能で実現できるけどね
733:デフォルトの名無しさん
17/12/24 16:11:04.02 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:デフォルトの名無しさん
17/12/24 16:13:21.90 JTJf6bSC0.net
>>712>>713
ありがとうございました。
735:デフォルトの名無しさん
17/12/24 17:56:35.14 ZKd7S1fn0.net
>>701-702
コードはあくまでも例で、実際はURLや文書内の文字列から判定しています
今回問題なのは、CreateObject("Shell.Application").WindowsをFor Eachで全要素を調べても、要素にそもそも含まれていない点です
IEの子窓として存在しており、タスクマネージャーで調べるとプロセスも存在するのに、IEオブジェクトを取得できません
しかし、WindowsAPIのFindWindowを用いるとハンドルの取得は可能だったので、
Set objIE = MAGIC(hWnd)のような形でハンドルからIEオブジェクトを取得する関数を作れないか質問させていただきました
736:デフォルトの名無しさん
17/12/24 19:48:46.67 TDjZS1ex0.net
Excel2010です
以下のコードを実行すると、"$A$2"が表示されます。
セル範囲に添字0を付けた場合、セル範囲の先頭セルが参照される
(この場合B2)と思い込んでいたのですが、私の誤りでしょうか?
MsgBox(worksheets(1).range("B2:C3")(0).address)
737:デフォルトの名無しさん
17/12/24 21:16:40.55 ODr8GH0o0.net
0 じゃなく 1
738:デフォルトの名無しさん
17/12/24 22:01:25.06 TDjZS1ex0.net
>>717
ありがとうございます
OffSet()だと原点がゼロなので
そういうのと混同していたかも知れません
739:デフォルトの名無しさん
17/12/24 22:44:17.96 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:デフォルトの名無しさん
17/12/24 23:29:24.13 XB6s5ekxa.net
>>714
そのセル全部のRangeに対して"=B2-C2"でいける。
741:デフォルトの名無しさん
17/12/25 00:16:31.32 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:デフォルトの名無しさん
17/12/25 08:06:21.04 fMKsEfdQa.net
>>719
fileName = Replace(fileName,○○,××)
743:デフォルトの名無しさん
17/12/25 08:07:54.57 fMKsEfdQa.net
ああ、AAAとBBBに数字がない前提じゃないとダメだな
744:717
17/12/25 12:59:33.91 5/ecyLcnM.net
>>721>>722回答ありがとうございます
まだ試せていませんが
AAA○○月BBBじゃなくて
AAABBB○○月にした場合もう少し簡単に記述出来ますかね?
ちなみにABに数字は含まれてないです
745:デフォルトの名無しさん
17/12/25 16:18:43.87 dIh/hlW50.net
んんんんあああああああああああああああああああああああああああああああああ
746:デフォルトの名無しさん
17/12/25 16:44:33.34 DuOFgh3Va.net
コピーしてファイル名置換するだけでしょ?
フォルダもすでに取得してるなら
fso.copyfile file.Path,folder.Path & "\" & Replace(file.Name,"○○","××")
だけで行けるんじゃね
747:デフォルトの名無しさん
17/12/25 17:30:49.11 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:デフォルトの名無しさん
17/12/25 17:46:45.39 DuOFgh3Va.net
>>727
ユーザーフォームの行き来はめんどくさいしスパゲティになりがちだからやめた方がいいと思う
というのはさておき、initializeじゃなくてactivateイベントにしてみたらどうかね
749:デフォルトの名無しさん
17/12/25 17:48:18.57 1470x9yD0.net
いやいや何か間違えてる
修正
仕方が無いので2の「戻る」に
UserForm1.Show
Unload Me
と書いてみると、今度は1から2にもう一度行こうとすると、「フォームは既に表示されています。モーダルに表示できません」と出ます
ついでにとにかくhideは避けてすべてunloadにしてもやはり2→1の段階で同じアラート
解決法はありますか?
750:デフォルトの名無しさん
17/12/25 17:48:59.15 1470x9yD0.net
>>728
ありがとうございます
調べてみます
分からなかったらまた書きますのでお願いします・・・
751:デフォルトの名無しさん
17/12/25 18:01:10.24 1470x9yD0.net
>>728
うまくいったようです
3時間ほど解決法が見つからず頭抱えてました
感謝です
752:デフォルトの名無しさん
17/12/25 22:53:06.92 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:デフォルトの名無しさん
17/12/25 23:30:15.25 63usksBrx.net
>>732
ファイルの種類に関しては、ループ処理の冒頭でFSO.GetExtensionName(f.Path)の戻り値を調べて処理を分岐させるようにすれば、狙った種類のファイルだけを処理できるようになると思うよ
755:デフォルトの名無しさん
17/12/25 23:37:14.60 aEhB4dZD0.net
ググったのですがどうしてもわからないので教えてください
【環境】Windows10、Excel2010
【不具合症状】新規コードの作成ができない
新規bookを作成し、VBEを起動した際、通常はプロジェクトウィンドウに
「Sheet1-3」が表示されるかと思いますが、真っ白なまま何も表示されない状態です。
メニューの「挿入」をクリックしても、標準モジュールがグレイアウトになってしまい、
新規コードの作成が行えない状態です。
ITに相談しても初めての事例とのことでわかりませんでした。
コンパネからのofficeの修復も行いましたが改善されません。
マクロのセキュリティは「全て有効」で設定されています。
xlsm形式で保存もしてみましたがダメでした。
PC再起動も試してみました。
同一PCで、既存作成マクロの実行は行えます。
既存マクロのVBEを起動した際、プロジェクトウィンドウやコードウィンドウは
普通に見えますが、コードウィンドウで1文字でも編集すると、F5実行時に
「ファイルが見つかりません」とのエラーが出ます。ステップ実行でも同じです。
編集は例えコメント行でも同じエラーが出ます。
新規作成は全てにおいて不可です。
自動記録をしようとすると「マクロが記録できませんでした」とエラーが出ます。
マクロの作成ボタンは押せますが、押してもコードウィンドウが起動しません。
新規作成と編集が制限されているようなのですが、どこから変更するのかが
どうしてもわかりませんでした。もしわかる方いらしたら教えていただけないでしょうか?
スレチであれば、該当スレッドに誘導していただけると助かります。
よろしくお願いします。
756:デフォルトの名無しさん
17/12/26 01:59:52.47 fIC/1lmja.net
>>734
エクセルのレジストリ削除してみてもダメ?
757:デフォルトの名無しさん
17/12/26 06:55:25.36 cWcYrW8d0.net
>>734
そのマシンに新規ユーザーつくって現象が発生する?
テンポラリやら消したら直るかもしれん
あとセキュリティ対策ソフト切って試すとか
758:デフォルトの名無しさん
17/12/26 06:58:32.09 gkP6o6Ks0.net
>>719
「01月」というファイル名のコピーが、「02月」として、同じフォルダに入れるのか
フォルダ内に、「01月」「02月」があるとして、
この状態で、もう一度、同じ事をするなよ!w
設計として、同じフォルダに入れるのはおかしい。
異なるフォルダに入れるべき
わかりやすいように投稿する時は、名前欄に、717 と入れてくれ
759:デフォルトの名無しさん
17/12/26 07:54:39.17 6qOsufVw0.net
>>735
>>736
732です、レスありがとうございます。
最悪、officeの再インストールも覚悟しています。
レジストリかも?とはITには言われましたが・・・・
新規ユーザーはまだ試していません。
セキュリティ対策ソフトはITの管轄なので、切れるかどうか不明ですが
聞いてみます。
こちらの書き込みは自宅からなので、次のレスが遅くなるかもしれません。
よろしくお願いします。
760:デフォルトの名無しさん
17/12/26 08:20:51.65 upqov7ALa.net
>>737
運用の話までは管轄外じゃね
あとは自分で考えりゃいいよ
761:デフォルトの名無しさん
17/12/27 09:27:07.83 58xyBvha0.net
>>721とか>>732とかのコードで意味わかんないところがいくつかある
(コードが間違ってるって意味じゃなくて、こっちの知識が足りなくて理解が追い付かないって意味です)
まず>>721は
なんでコレクションを宣言してるのか?
しかもなぜ宣言したのに使わないのか?
変数eは何のために使ってるのか?
ファイルのパスをsplitで分割してるけど、
ファイル名だったらinstrrevで\を探したほうが話が早いんじゃないか?
等々
>>732は
ループの中でdim使うのは大丈夫なの?
複数回宣言したらエラーになりそう
後、一番知りたいのが
If strFolder <> "." And strFolder <> ".." Then
これ、どういう意味なのか解説をお願いしたい
(書いてる人たちにケチつけてるんじゃなくて、本当に分らない事を教えて欲しいだけです)
どなたか教えてください、よろしくお願いします
762:デフォルトの名無しさん
17/12/27 09:45:06.41 fOQst04i0.net
>>740
コマンドプロンプトで cd .. って打ってみたら判る
c:>test>test1> cd ..
親ディレクトリに移動する。つまり親フォルダの事
「.」 は「.」 カレントフォルダの事
763:デフォルトの名無しさん
17/12/27 10:22:00.13 fOQst04i0.net
寝ぼけて書いてたからめちゃくちゃだな^^;
c:\test\test1> というフォルダがあったとしてそこで
c:\test\test1>cd .. と打てば
c:\test> と親ディレクトリ(フォルダ)に移動する
764:デフォルトの名無しさん
17/12/27 10:45:52.46 90Vjgj1Fa.net
>>740
ループ内でDimしてもエラーにはならないよ
その都度メモリが割り当てられるだけじゃないかな
フォルダ名の"."と".."は相対パスじゃなかったかな
一個上と二個上の親フォルダだったと思う
間違ってるかもしれないから調べてね
765:デフォルトの名無しさん
17/12/27 10:46:46.56 90Vjgj1Fa.net
あ、間違ってたw
.がカレントフォルダで..がひとつ上の親フォルダね
すんませんな
766:デフォルトの名無しさん
17/12/27 10:48:05.37 90Vjgj1Fa.net
あとsplitの問題に関しては読みやすさとか書きやすさじゃね
俺もよくやる
楽だからね
767:デフォルトの名無しさん
17/12/27 12:51:59.50 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
17/12/27 12:58:13.04 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:デフォルトの名無しさん
17/12/27 13:38:32.87 lJNZ7xHQ0.net
VBA勉強し始めて間もない時に組んだマクロに
replaceという名前のプロシージャを作りました
そのことはすっかり忘れてたのですが、最近になってそのマクロを手直しする必要があって
その中でReplace関数を使おうとしたらエラーが出る
おかしいなと思い調べてみたらSub replace() を発見
プロシージャの名前を変えたら大丈夫かと思いきやなぜかどこかに何かが残っているようでエラーがでる
一旦そのモジュールを解放したらReplace関数は使えるようにはなりました
しかし、なぜかReplaceと打ってもreplaceとなる
replaceと打ってもそのままreplace
replaceをReplace関数と認識してくれてはいるものの、どこかに何かが残っている
他のブックでは起きないのでまぁそれほど支障はないものの、もし分かる方いらっしゃったら
どうすればいいか教えてください
770:デフォルトの名無しさん
17/12/27 13:47:19.08 fCTi8N3va.net
Replaceで変数宣言してみ
771:デフォルトの名無しさん
17/12/27 15:20:29.55 DW1nj5RcM.net
>>748
大文字小文字は、現在開いてるコード全体で統一されてしまうからな。
変数でもプロシャージャでもいいから、定義し直すと内部で覚えてる大文字小文字が上書きされるぽ
この仕様のせいで、他人の書いたブック開いたまま修正保存するといつのまにか変わってたりする。
するとWinMergeとかでDIFFしたときにイラッ
独り言でした
772:デフォルトの名無しさん
17/12/27 18:43:06.62 8Kp24ZKYM.net
プロシージャ外に書いたオブジェクトの寿命はいつまでなのでしょうか?
グローバル変数にオブジェクトを保存してそれをfunctionで返すシングルトンオブジェクトを作ったのですが、
プログラムが一度終了して再度起動した際もオブジェクトが残っており、ゴミデータでエラーが起きています。
一度ファイルを全て閉じるまでは残るものなのでしょうか?
773:デフォルトの名無しさん
17/12/27 18:55:21.26 K6GLaCg8a.net
>>751
グローバル変数ならエラーで止まるかブックが生きてる限りは生きてるんじゃね
774:デフォルトの名無しさん
17/12/27 19:03:21.38 4eyrVwN9H.net
>>751
あとEndで止めると死ぬ
775:デフォルトの名無しさん
17/12/27 20:23:28.17 ry3vSREld.net
>>753
End なあ、せめて Class_Terminate()して欲しかった
776:デフォルトの名無しさん
17/12/27 20:40:54.92 RyDVOJzS0.net
>>734 です。
officeの再インストール試してみましたが
不具合解消せずでした・・・・無念
幸い既存マクロは動くので、新規作成と実行は
他のPCでやることにしました。
不具合はExcelだけで、Accessでは特に問題ありませんでした。
一応ご報告まで。
777:デフォルトの名無しさん
17/12/27 20:55:52.26 K6GLaCg8a.net
>>754
てか、マクロ終わったら初期化すりゃよくね?
できない仕様なの?
778:デフォルトの名無しさん
17/12/27 21:08:27.21 CubzVxEy0.net
>>756
マクロ終わったら誰が初期化するん?
779:デフォルトの名無しさん
17/12/27 23:24:01.01 TIhBPqs40.net
>>755
マクロの記録から操作を記録すると
標準モジュール作成される?
780:デフォルトの名無しさん
17/12/27 23:29:35.39 0b7v1yOK0.net
>>753
Endだとなにがまずいのでしょうか
781:デフォルトの名無しさん
17/12/28 02:02:28.11 uSnaEunu0.net
>>759
Globalで保持していると想定していた変数がいつのまにかクリアされていて想定外の動作をおこし痛い目にあったことがあります。
調べてみたら、エラー発生時またはEnd通過時にGlobal変数の寿命が尽きるようで、、
それ以来、Global変数もEnd Statementも避けています。
記憶が必要な場合は、Cell値やValidation値またはDocumentProperty等を使うようになりました。
782:デフォルトの名無しさん
17/12/28 02:45:31.50 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:デフォルトの名無しさん
17/12/28 05:04:43.84 BF7frMSQ0.net
>>749
>>750
ありがとうございました。
785:デフォルトの名無しさん
17/12/28 08:06:18.47 VokPBxMja.net
>>757
マクロ終わったらオブジェクト破棄するんじゃダメなのかと言うことだが
まあダメな使用なんだろうけど
786:デフォルトの名無しさん
17/12/28 08:14:47.46 ezpQ52SId.net
イミディエイトウィンドウにあるオブジェクトのことだよね
787:デフォルトの名無しさん
17/12/28 17:26:42.52 GeC01ME+0.net
>>751,760
そもそもプログラムが終了ってどういう事をさしてる?
ホントにプログラムが終了すれば、すべての変数の内容は失われるよ
たんに実行するコードが無くなっただけではプログラムは終了していない
Endはプログラムを終了させるけど、エラー出ただけでは終了するとは限らない
デバッグで再実行や変数見たりできるのはプログラムは中断したけど終了してないから
788:753
17/12/28 23:10:38.77 lWNTZScR0.net
>>758
753です。
マクロの記録そのものができないのです。
記録しようとすると「マクロの記録ができませんでした」と
エラーが出てしまいます。
新規作成と編集が全て制限されているようです。
セキュリティは「すべて有効」で設定しており、
そこでの問題は無いと思うのですが・・・・
789:デフォルトの名無しさん
17/12/29 04:00:07.55 G/qmS2zk0.net
>>761
"_" は次の行をつなげるためにつけたのだろうけど
Application.DisplayAlearts = True の前の行にも "_" が付いているから
何か貼り付け忘れか、間違って削除してしまったものがあるのでは
790:デフォルトの名無しさん
17/12/29 04:08:47.98 G/qmS2zk0.net
セキュリティーレベル一番高いとダメなんじゃね
791:デフォルトの名無しさん
17/12/29 07:22:34.45 b/Z/hzqU0.net
>>734
あー、昔そんな事象に当たったことあるよ
原因は同じかどうかは分からんけど
俺の場合とんでもなく深い階層のフォルダに置いてたら
VBEのシートモジュールが青く表示されてコードが作成できなくなった
そのファイル、とりあえず浅い階層のフォルダや
どこかのサーバに置いているなら
クライアント側にコピーして内容確認出来る?
792:デフォルトの名無しさん
17/12/29 08:53:00.31 JNsjSKSN0.net
732、753です
皆様レスありがとうございます。
作成の不具合は、全くの新規Bookでも起こります。
既存マクロの場合は、コードの表示と実行は行えますが
編集が制限されています。
問題が発生してから、他のPCで新規作成したマクロを
該当PCで実行しようとしましたが、それはコードの表示すら
できませんでした。ファイルサーバー経由とかではなく
デスクトップ上に置いて実行しても同じです。
Accessでは特に問題ないので、VBAそのものではなく、
Excel単体の何かだとは思うのですが、皆目見当がつきませぬ。
793:デフォルトの名無しさん
17/12/29 10:57:41.44 MXSoKJ1y0.net
>>767
>>761です
一部コピペして使ったので何か消してしまったのかもしれません・・・
確認してみます、ありがとうございます。
794:デフォルトの名無しさん
17/12/30 12:22:18.46 cGzM6pFo0.net
CreateObject("System.Collections.ArrayList")ってやったら
.NETのArrayListがVBAで使えてしまったんですが
これ隠し機能とかじゃなくて正式に使っていいんですよね?
795:デフォルトの名無しさん
17/12/30 13:25:09.57 dKM8JRI70.net
前にも話題に上がったけど
.NETのほんの一部はVBAからも使える
リファレンスにも書いてあったような気がする
他で代替できるのでArrayListをわざわざ使うメリットはないということで
その
796:ときは終わったと思う
797:デフォルトの名無しさん
17/12/30 15:32:35.43 cGzM6pFo0.net
>>773
参考にします。ありがとうございました
798:デフォルトの名無しさん
17/12/30 15:33:00.15 xXJ5T9Ia0.net
>>772
.Net Frameworkの機能でコンストラクタに引数を渡す必要のないものは使えるらしい
>>773
ArrayListは各種メソッドが揃ってるからコレクションより使いやすいんじゃね?キーを使わないなら
ただ遅いのがたまに傷
799:デフォルトの名無しさん
17/12/31 01:12:29.94 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:デフォルトの名無しさん
17/12/31 08:34:16.68 5sx4VZ0k0.net
>>774
Windows APIだって使えるんだぞ?
801:デフォルトの名無しさん
17/12/31 08:58:37.79 TXRnAgcd0.net
VBAの保存方法について
バックアップどうしてますか?
VBAのマクロだと戻る釦聞かないし、バグって復旧するとマクロの個所全部消えちゃうので2つくらいのバックアップを別ファイルでとってあるんですけど皆さんはどうしてますか?
まだ素人なので思ったのと違う処理になって戻せなくなることがしょっちゅうあるので
バックアップは大事
802:775
17/12/31 09:02:17.31 TXRnAgcd0.net
>>778
戻る釦ってまるい矢印の奴ね
803:デフォルトの名無しさん
17/12/31 09:09:26.61 PwPBZUwb0.net
>>778
バージョン管理システム入れてないなら同じになるでしょ。
俺も同じくでファイル名_Ver nnn.xlsmと言うかたちで3世代別フォルダに保存してるけど
(時たま忘れたりする^^;
804:デフォルトの名無しさん
17/12/31 09:49:30.47 aMifsa1T0.net
マクロ有りエクセルファイル自体にデータを入れて運用するのと、
データは別エクセルファイルにしてマクロ有りエクセルファイルでデータ入りエクセルファイルを操作するのと、
どっちがメンテナンスしやすい作り方だろうか?
いつも悩んでしまう
805:デフォルトの名無しさん
17/12/31 09:52:29.70 35C6Q16O0.net
アドインマクロにしましょう
806:デフォルトの名無しさん
17/12/31 11:06:17.25 fsRyV04Q0.net
マクロのバージョン管理ってどうやってます?
インポートファイルを分けすぎると不便なのでshareFanction見たいなインポートファイルに使いそうな関数全部入れてますが、初心者なもので開発中に関数の引数や戻り値を変えたくなるような場面が多々あり
今までのshareFanctionと互換性が保てなくなりますが、引数と戻り値を修正した関数以外でバグを潰したような関数は最新を使用したいです。
今はコピペで対応してますが
807:デフォルトの名無しさん
17/12/31 11:27:58.03 rNrttlhS0.net
個人なのか仕事なのか書かないと有効なレスがつかないのではないかな
808:デフォルトの名無しさん
17/12/31 11:34:47.18 fsRyV04Q0.net
>>784
個人です
個人で開発、個人で使用�
809:ナす
810:デフォルトの名無しさん
17/12/31 11:36:51.05 rNrttlhS0.net
>>785
ならGithubとSourceTreeで快適にできるんじゃないの?
俺も全然高度な使いこなしできてないけど楽ちんだ
811:デフォルトの名無しさん
17/12/31 11:55:17.97 fsRyV04Q0.net
>>786
ありがとうございます
ざっとみた感じソースファイルのバージョン管理はできそうですが、
例えばサーバーあるいはローカルマシン上にそのshareFanctionを使用している分散しておいてある場合、
それぞれのマクロを調べて更新したいファイルを選択、修正版マクロを適用する、
みたいな使い方ってできるんですかね?
812:デフォルトの名無しさん
17/12/31 11:57:21.02 fsRyV04Q0.net
>>787
>>例えばサーバーあるいはローカルマシン上にそのshareFanctionを使用している分散しておいてある場合、
修正
shareFanctionを使用しているファイルが
813:デフォルトの名無しさん
17/12/31 12:53:47.48 TXRnAgcd0.net
ヴァージョンって仕事じゃないからいつから何時まででUP履歴にしたらいいかわからなん
機能変更したら必ずかもしれないけど、個人用だとやりながら変更しているからバージョン数が半端ないことになる。
814:デフォルトの名無しさん
17/12/31 13:10:06.47 sYPUhsnja.net
バージョン管理は大変だよな
インストーラーみたいなのつくってどうにかしようとしてるがうまく行くかわからん
815:デフォルトの名無しさん
17/12/31 13:25:39.05 pVPyHW7p0.net
>>789
> バージョン数が半端ないことになる。
問題ないでしょ
816:デフォルトの名無しさん
17/12/31 13:31:04.61 fsRyV04Q0.net
>>790
専用のソフトがなければ1sheetをマクロ関数管理用にして各関数内にver x.y.z(x変更で互換性無し、y変更で互換性あり、z変更は互換性ありバグ修正みたいにして)
モジュールをインポートしたファイルをオープン時に、イベント検知で所定の管理ファイルを検索、新しいバージョンがあれば自動で今までのモジュールを解放、y,zバージョンが最新のファイルをインポート
みたいにすれば実現可能そうですが結構手間がかかりそうで…
817:デフォルトの名無しさん
17/12/31 13:56:42.14 hllNi94Va.net
マクロで書けよ。
バージョン管理。
セキュリティが低下するけどな。
818:デフォルトの名無しさん
17/12/31 18:06:59.07 nOUozIFo0.net
そもそも論として、たかがマクロでバージョン管理が必要になるような力作()作るなよw
キミたちは一体エクセルマクロで何を築こうとしておるのかねw
819:デフォルトの名無しさん
17/12/31 18:13:51.04 2b4EaTgg0.net
仕事でVBA扱ってると色々な理由から小さいマクロでもバージョン管理が必要になってくる。
820:デフォルトの名無しさん
17/12/31 19:27:51.32 rNrttlhS0.net
>>794
内容がぐちゃぐちゃになったら困るものにはバージョン管理が必要さ
力作()でなくても再構築はかったるいからな
821:デフォルトの名無しさん
17/12/31 19:58:25.49 nOUozIFo0.net
>>796
力作()じゃないのにぐちゃぐちゃになるってどんだけ当てずっぽうにマクロ書いてんだよw
822:デフォルトの名無しさん
17/12/31 20:00:31.71 pVPyHW7p0.net
社内に展開するとかでサポートが必要ならバージョン管理ぐらいは必須だろ
>>794は無知すぎ
823:デフォルトの名無しさん
17/12/31 20:24:53.68 nOUozIFo0.net
>>798
確かにおまえらの考える事は見当もつかんけどなw
別にいいや無能思考に明るくならなくてもw
824:デフォルトの名無しさん
17/12/31 20:28:42.31 1PdKj8Yj0.net
またメゾット君か。
825:デフォルトの名無しさん
17/12/31 20:42:44.41 rRjJbr8wx.net
メゾット君って雰囲気ですぐ分かるよね
826:デフォルトの名無しさん
17/12/31 20:54:32.08 KnonKKai0.net
OLDフォルダにファイル名の後に日付つけたファイルをコピーしてる
827:デフォルトの名無しさん
17/12/31 21:20:00.26 A+5By6dM0.net
ていうかバイナリファイルをバージョン管理システムに登録したところで
単なる時系列バックアップにしかならんうえに
シートを更新しただけでバージョンが変わるから意味ないのでは
828:デフォルトの名無しさん
17/12/31 22:37:10.58 rNrttlhS0.net
力作2.0
829:デフォルトの名無しさん
17/12/31 22:50:02.43 InzisC8s0.net
悩みはみんな一緒なんだね。俺はバージョンアップに悩んでアドイン化したが
これはこれで悩ましいところがあるんだな。シートを初期化(つまりClearとかClearContents)する
のにもよーく考えないと結構危ない。アドインはどのブックでも実行出来てしまうからPCに疎いヤツが使うのも考えると
別の方法を考えた方が良いんだろうかとか考えてる。
830:デフォルトの名無しさん
17/12/31 22:55:00.56 rNrttlhS0.net
>>805
アドインてxlamのこと?
だったらそのシートは一切使っちゃダメだよ
プログラムモジュールだけの存在にするべき
831:デフォルトの名無しさん
17/12/31 23:12:43.15 InzisC8s0.net
>>806
そりゃ分かってるての。ブックを指定する時は「ActiveWorkBook」とするしかない(決めつけはよくないが)
からよーく考えてコードを書かないと危ない場合もあるって話。使う連中の9割はマクロどころかシート関数も
知らないような連中なんだから。
832:デフォルトの名無しさん
17/12/31 23:41:30.90 rNrttlhS0.net
>>807
・処理をスタートするFunction や Subはアドイン側にはない。当該Book側にある
・そのFunction や Subがアドイン側の機能を使う
だとするとアドイン側に「ActiveworkBook」なんて書く必要はなくて、処理対象のSheetやRangeを
引数で受け取るだけになると思うんだがね
833:デフォルトの名無しさん
17/12/31 23:52:05.59 InzisC8s0.net
>>808
作業するBookはxlsxなんだよ。マクロはxlms側に書いてある。
なんでこうしたかというと、仕事柄、ブックは地方自治体に提出する場合があるから。
何の事かわからないだろうからもうちょっと書くと、測量データの野帳なんだよ。
834:806
17/12/31 23:53:24.81 InzisC8s0.net
xlmsじゃねえや、xlamだな。
835:デフォルトの名無しさん
18/01/01 04:27:25.57 WDGj6QXoH.net
>>809
マクロ有効ブックから
マクロ無効ブックを開いて処理して保存して閉じる
という方法も有ると思う
836:デフォルトの名無しさん
18/01/01 09:37:05.14 hnfikatx0.net
自動処理したいなら>>811だろうし、操作者が開いて何かしたいならメニューに追加しとけばいいだけだと思う
>>809は無知なのかちょっと頭固いんだろうな
837:デフォルトの名無しさん
18/01/01 13:40:19.53 iV2QIiO7H.net
>>812
作業ブック側にコード書けないんだよ。知ったかすんなよボケ
838:デフォルトの名無しさん
18/01/01 13:55:03.62 7v1CUCWaM.net
>>813
作業ブックにコードなんか要らんだろ w
知らないなら黙ってろ
てか、アドインでメニュー追加なんて基本中の基本だと思うが
URLリンク(toshimana.hatenablog.com)
839:デフォルトの名無しさん
18/01/01 14:25:45.74 7yffOGmB0.net
知らないことを素直に知らないと言いなさい
840:
18/01/01 14:27:07.60 tZ/lpIQo0.net
今年はいい年になるかなw
841:デフォルトの名無しさん
18/01/01 14:29:26.10 UomJiKNZ0.net
>>814
Workbook_AddinUninstall てのは知らなかったな。
Workbook_Open するのと効果は違うんだろうか?
842:デフォルトの名無しさん
18/01/01 14:54:13.21 ixsE+qrMx.net
またメゾット君が暴れてるな
あの馬鹿が出入りするようになってから荒れすぎ
843:デフォルトの名無しさん
18/01/01 15:45:18.49 bzNinO0Ma.net
>>817
よく考えろよ
844:デフォルトの名無しさん
18/01/01 16:11:19.12 PLRWaMeF0.net
>>819
おっと、 Workbook_AddinInstallを Workbook_AddinUninstallと書き間違えた
845:デフォルトの名無しさん
18/01/02 09:36:26.90 nA397GZea.net
>>820
だとしてもだ
イベントの言葉の意味そのままだよ
よく考えろよ
846:デフォルトの名無しさん
18/01/02 12:29:02.41 MKa2S+Tjd.net
>>821
「対象のアドインを参照設定しているブックを開いた」というイベントを想定してた
そうじゃないのね
847:デフォルトの名無しさん
18/01/03 10:57:08.56 rhTFyGx/0.net
>>806
そんなことはない。
設定値を保存するためのiniファイルの代わりにするとか、テンプレートの代わりにするとか、使い道は沢山ある。
848:デフォルトの名無しさん
18/01/03 11:46:24.84 ZpYRfYyG0.net
アドインにするにしてもなんにしても運用がしっかりされてないと意味がない
ファイル名やシート名程度が保証されてないならマクロ化なんて諦めろ
849:デフォルトの名無しさん
18/01/03 11:59:35.70 Uz65NhYa0.net
>>823
設定値を保存するのはやめたほうが良いと思うな。
バージョンアップしたときに設定値がリセットされてしまうとか、エクセルバグの巻き添えでブック破損の危険性がある。
できるだけアドインは読み取り専用で運用するべきだと思う。
過去に内部シートに保存するように作って問題が起きたので、バージョンアップ時にxmlにコンバートさせた事があるわ
850:デフォルトの名無しさん
18/01/03 12:49:50.09 lLEkaf6s0.net
お前のバグを根拠にされてもなぁ
851:デフォルトの名無しさん
18/01/03 14:45:49.49 hfgsKA7ma.net
まあ、設定は外出しにするのが普通に安全策じゃね?
xlamのシートは明らかに利用してほしくないっていう思いが伝わる作りな訳だから
852:デフォルトの名無しさん
18/01/03 15:32:51.77 00k1dN96d.net
利用者が不用意にセルデータをクリアしてそのままセーブしても自覚すらしないかも
853:デフォルトの名無しさん
18/01/04 05:46:13.89 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:デフォルトの名無しさん
18/01/04 06:37:20.49 MFccPkO20.net
1000行程度ならSUMIFSとかでできるんじゃないの
855:デフォルトの名無しさん
18/01/04 06:55:39.59 IcyEu6L/M.net
>>829
要件によるけどそういうビューを作ればいいんじゃね?
create view V as (
select A列,B列,C列,sum(D列) as D列
from 表
group by A列,B列,C列
)
856:デフォルトの名無しさん
18/01/04 06:57:20.78 IcyEu6L/M.net
すまん、寝ぼけててSQLスレと勘違いしてた...
>>831はなしで
857:デフォルトの名無しさん
18/01/04 07:39:39.14 IGCyfMcU0.net
>>829
見るからにデータベース向けの案件
集計するキーとなる列が左端一列、その右に合計対象の数値列という2列形式なら
データタブにある統合でできるんだが
858:デフォルトの名無しさん
18/01/04 08:01:11.56 5mprgbRzp.net
>>830
すみません説明不足でした。
キー項目が1000種類以上あり、毎回CSVから読み込んでから処理をする為、事前にWorkSheet関数を作っておくのが難しい状況です。
何か手はありますか?
859:デフォルトの名無しさん
18/01/04 10:15:47.38 fF+rBx/60.net
データベース系のデータは素直にデータベースソフトで管理しようよ・・・。
アクセスでやればマウス
860:操作だけで終わる様な問題だよ。
861:デフォルトの名無しさん
18/01/04 10:22:48.62 d1LyNdol0.net
>>834
ADOでcsvファイルをデータベースとして接続して >>831 に挙げられた
SELECT文を実行する、という手段がとれる
862:デフォルトの名無しさん
18/01/04 10:31:44.20 no6Ylxj0a.net
sqlならselectとorder byだけですむ案件だな
愚直にプログラム組むと厄介だけどね
863:デフォルトの名無しさん
18/01/04 10:38:07.48 7zx5w2nrd.net
ピボットでいいんじゃね
864:デフォルトの名無しさん
18/01/04 11:56:10.93 iFN99ve4d.net
LINQって使えないんだっけ?
865:デフォルトの名無しさん
18/01/04 13:22:48.32 Gj6t78kg0.net
>>829
嘔吐フィルターかけてソートしてから
一致を
866:上からみて加算と消去 フィルター解除忘れずに(多分ソート直後にすぐ)
867:デフォルトの名無しさん
18/01/04 13:42:37.28 hO93+Igl0.net
>>829
↑
上級者じゃない俺なんかこういうのみると
全部2次元配列にぶちこんでif多用して無理矢理やっちゃうんだけど
そういうのはだめなの?
868:デフォルトの名無しさん
18/01/04 13:47:48.60 cJgHrV+ta.net
>>841
だめじゃないし、初心者なら無理やりVBAで組むのも勉強になるよ
重複の無いリスト作るのがやや面倒というか、煩雑になりがちなところだな
エクセルの機能使えばいいっちゃいいけど、好みじゃないな
869:デフォルトの名無しさん
18/01/04 13:55:27.88 hO93+Igl0.net
>>842
おれこういうの無理矢理やっちゃうの大好きで完成すると充実感半端ない
俺が組むマクロってそんなのばかりだ
基本初心者レベルの知識しか使わないでやっちゃうんで、
こういう質問をする人は、無理矢理やると遅くなるとか別の理由があって聞いてるのかな?
とか思っちゃう
870:デフォルトの名無しさん
18/01/04 15:19:59.75 kPmYITG+0.net
ファーム1の中に、オプションボタンが18個あり、オブジェクト名を『OP_1』~『OP_18』としてボタン1を押してフォーム2に切り替える時に選択されてるオプションボタンのキャプションを取得して変数TUR1に入れたいんですけどどうしたらいいですか?
871:デフォルトの名無しさん
18/01/04 16:20:08.23 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:デフォルトの名無しさん
18/01/04 17:41:48.62 uhyB+DSmd.net
初心者なんだけど以下のような表から特定のセルに入力された場合だけ、特定のセルをカウントする方法ってありますか?
Aは全て
Bは選ばれたものだけ、みたいな
Aの全てをカウントするのはわけないんだけど、Bの選ばれたものだけをカウントする方法がわからない
IF使うにしても何を指定すればいいのでしょう?
わかりにくかてすいません
URLリンク(o.8ch.net)
873:デフォルトの名無しさん
18/01/04 17:54:54.38 IwnGnNnba.net
>>843
普通にやり方がわからないんじゃないの
>>846
cがキーになるなら重複しないcの一覧をつくって二次元配列でも構造体でもいいけどbがtrueならカウントするっていう風にすればいいと思う
件数多いならDBの領分だと思うけどね、この手の集計は
874:デフォルトの名無しさん
18/01/04 18:02:17.19 HiTEnEcXd.net
>>845
ありがとうございます!
875:デフォルトの名無しさん
18/01/04 18:13:43.61 uhyB+DSmd.net
>>847
Bがtrueなら、というのはどうやって指定すればいいですか?
範囲指定で
876:デフォルトの名無しさん
18/01/04 18:23:20.07 uhyB+DSmd.net
すいません、間違えて書き込んでしまいました
>>847
Bがtrueなら、というのはどうやって指定すればいいですか?
範囲指定でがっつりやると、指定した範囲に一つでもtrueがあるとカウントしてしまって結局全部をカウントしてしまうんです
877:デフォルトの名無しさん
18/01/04 18:27:59.94 iMxAIJokM.net
>>829
何も難しく考えなくても、E列に=A&B&Cを入れて、E列を行ラベルにしてピボットテーブルで集計するだけで出来るよ。
ABC列をもどしたいならINDEX,MATCHで引っ張って来ないといけないけども、日々エクセル使ってる人なら手慣れたものだと思う。と言うか慣れておくと色々便利。
詳しい解説いるならする
878:デフォルトの名無しさん
18/01/04 18:58:58.92 IwnGnNnba.net
>>850
一行ずつループしてるんだよね?
フラグ用に変数用意してるなら一ループごとに初期化し直さないとだめよ
ってか、今どんなコードで動かしてるか書いてくれるとやり易いんだけど
879:デフォルトの名無しさん
18/01/05 02:37:52.28 Uixpo
880:pG00.net
881:デフォルトの名無しさん
18/01/05 17:45:28.92 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:デフォルトの名無しさん
18/01/05 21:06:25.46 UyFZaUswa.net
>>829
そういう処理だったらソートしても問題無さそうだからソートしてループで良いんじゃね?
>>854
4桁の数字以外共通だとどうしてForとGetElementsByTagnameとの組み合わせでクリック出来ないのかが分からん。
883:851
18/01/05 21:25:01.57 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:デフォルトの名無しさん
18/01/05 22:16:41.06 vO88ak3C0.net
DOMに親要素とか隣の要素を見ていくのあったよね
あれで必要なだけ移動させればいいんじゃね
885:デフォルトの名無しさん
18/01/05 22:20:08.87 vO88ak3C0.net
>>829を
>>836の方法で頑張ってコードにしたのを書き込みたいんだけど
403になっちゃうのよね
禁断のコードが含まれているのかしら
886:デフォルトの名無しさん
18/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:デフォルトの名無しさん
18/01/08 01:12:41.23 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
18/01/11 23:28:08.34 kwmxLljDv
教えていただきたいです。
あるセルの数字に関して
o以下と12以上はA
6以上12未満はB
それ以外はなしという式を作るとしたら
=if(or(セル<0,セル>=12),"A",if(6<セル=<12,"B"," "))
という式ではちゃんと返ってきません。
正しい式をご教授願います。
889:デフォルトの名無しさん
18/01/11 12:40:04.91 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:デフォルトの名無しさん
18/01/11 19:23:41.06 WJjCr32Q0.net
エクセルの2003ですが、
並べて比較を使用した際にペアになっているブックと、
そのブックで表示されているシートを取得するには
どのように記述すればいいでしょうか。
891:デフォルトの名無しさん
18/01/11 21:16:23.66 JbTpKTF6M.net
>>863
何を言っているのでしょうか?
892:デフォルトの名無しさん
18/01/11 21:25:37.65 a2sLbYI50.net
世界教師マイトLーヤ「大暴落は日本からスタート」
スレリンク(2chse板)
【マイトLーヤ】 米国債を売れ 【1200兆円】
スレリンク(eco板)
893:デフォルトの名無しさん
18/01/12 01:30:55.27 GWvM9lig0.net
>>863
Excel2003はサポート切れてますので
Excel2007にのりかえましょう
894:デフォルトの名無しさん
18/01/12 01:41:04.62 .net
>>866
Excel2007なら>>863できるん?(´・ω・`)
895:デフォルトの名無しさん
18/01/12 15:56:41.55 kdQVxAch0.net
0回目って何?
896:デフォルトの名無しさん
18/01/12 19:59:42.26 8L8z7qJh0.net
vbModelessで開いたUserForm上のTextBoxにSetFocusするようInitializeに記述しても効きません
これって無理なんですかね?
vbModelessを切るとフォーカスがちゃんとTextBoxに移るんですけどね
897:デフォルトの名無しさん
18/01/12 23:20:03.95 Ln5WwMFr0.net
初期状態でフォーカスを当てたいなら
UserForm.Show vbModeless
UserForm.TextBox.SetFocus
とフォームを呼んでいるプロシージャ側に書く
フォームのイベントならActivateでどうでしょう
毎回フォームがアクティブになるたびフォーカスしちゃうけど
Initializeがなぜはしらないのかは知らない
898:デフォルトの名無しさん
18/01/12 23:44:10.99 Ln5WwMFr0.net
実験してみたらInitializeは呼ばれてるけど
SetFocusだけがだめみたい
他のことは普通にできる
なんでしょうね
899:デフォルトの名無しさん
18/01/12 23:46:18.93 WKndAwKhM.net
いやExsel 2007もサポート切れてますが
900:デフォルトの名無しさん
18/01/13 03:26:50.74 0Hr8k8ED0.net
>>871
自分でもいろいろやってみたんですけどやっぱりダメみたいですね
ありがとうございました
901:デフォルトの名無しさん
18/01/13 09:26:06.50 60QkmGs40.net
試してないけど、プロパティのTabIndexも駄目だったの?
902:デフォルトの名無しさん
18/01/13 10:05:22.76 8yN0Kzpj0.net
ThisWorkbook.Application.Hwndでブックのハンドルを取得して、
SetLayeredWindowAttributesで透過処理をする時、
LWA_ALPHAでは問題ないのに、
LWA_COLORKEYに変えると、なぜかブック全体ではなく、
シート上に最初に配置したコマンドボタンの方に誤爆します。
しかも、自分のPCでは問題ないのに、他人のPCだと誤爆するという意味不明さ。
ハンドルがずれる的なバグでもあるのでしょうか?
903:デフォルトの名無しさん
18/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