Excel VBA 質問スレ Part51
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (スププ Sd4a-O827)
2017/11/08(水) 11:26:30.13ID:+KUB1/9hdスレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
※前スレ
Excel VBA 質問スレ Part50
http://mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
653デフォルトの名無しさん (アウアウカー Sa6f-MO8t)
2017/12/20(水) 00:40:50.45ID:xfg3gakwa コマンドラインが敷居高いならeclipseでやれ
敷居高いつっても環境変数設定してそこにパス通すだけだがな
敷居高いつっても環境変数設定してそこにパス通すだけだがな
654デフォルトの名無しさん (ワッチョイ d2af-8sno)
2017/12/20(水) 01:00:50.98ID:sohN4awK0 javaって効率悪すぎだろ
テキストエディタで編集
↓
名前つけて保存
↓
コマンドプロンプトでコード入力
↓
実行
どんだけ時間かかるんだよ
テキストエディタで編集
↓
名前つけて保存
↓
コマンドプロンプトでコード入力
↓
実行
どんだけ時間かかるんだよ
655デフォルトの名無しさん (アウアウイー Sa07-nYOw)
2017/12/20(水) 08:24:00.28ID:TZHE5kKsa いやeclipse使えよ
656デフォルトの名無しさん (ササクッテロレ Spc7-LxOA)
2017/12/20(水) 09:28:33.38ID:FRuTBLwYp これ以上はスレ違いなのでJavaスレでどうぞ
657デフォルトの名無しさん (アークセー Sxc7-Zhdx)
2017/12/20(水) 09:36:49.97ID:GPFg9WZwx eclipseも知らないで手動でコンパイルしながらブチキレてるの想像してワロタ
道は遠いね
道は遠いね
658デフォルトの名無しさん (スッップ Sd32-T3BS)
2017/12/20(水) 12:25:53.38ID:Vi8ViNgtd スレチ
659デフォルトの名無しさん (アウアウカー Sa6f-QofM)
2017/12/20(水) 12:41:32.07ID:/dU/ndoRa お前ら良かったな
EXCELでPythonが使えるようになるかも知れないんだって?
あれはObject指向の流れを組む関数型を目指しているところの言語っていうからやりがいはあるよね
俺もVB.NetやC#はやったけど
EXCELに載ることが確定したらこれからPython覚えるわ
まぁ構造化言語からObject指向型言語に移行したとき
めちゃくちゃ苦労したけど
今回も苦労するんだろうなぁ
EXCELでPythonが使えるようになるかも知れないんだって?
あれはObject指向の流れを組む関数型を目指しているところの言語っていうからやりがいはあるよね
俺もVB.NetやC#はやったけど
EXCELに載ることが確定したらこれからPython覚えるわ
まぁ構造化言語からObject指向型言語に移行したとき
めちゃくちゃ苦労したけど
今回も苦労するんだろうなぁ
660デフォルトの名無しさん (アウアウイー Sa07-nYOw)
2017/12/20(水) 13:38:58.93ID:/fbzm/vOa Pythonはさらっと概要見たぐらいだけど面白そうだね
まあexcelにのらなくても勉強して損にはならんだろうな
まあexcelにのらなくても勉強して損にはならんだろうな
661デフォルトの名無しさん (ワッチョイ 5303-6+fO)
2017/12/20(水) 15:31:22.90ID:EAMpcVD20 必要ないもん勉強したって時間のムダだっつーの
真のエクセルマクラーだったらマクロ書くのにパイソンしか使えなくなった時に必死でググれ
真のエクセルマクラーだったらマクロ書くのにパイソンしか使えなくなった時に必死でググれ
662デフォルトの名無しさん (スップ Sd32-GTd9)
2017/12/20(水) 16:07:26.91ID:/h7jUJynd 今のままでも関数型で出来るらしいが
https://qiita.com/matumoto_onga/items/7adfd4cf48288c477901
https://qiita.com/matumoto_onga/items/7adfd4cf48288c477901
663デフォルトの名無しさん (ワッチョイ f28a-mLIQ)
2017/12/20(水) 18:29:06.12ID:khkAeR460 Pythonはオブジェクト指向も関数型も全部後付けって感じでイケてねえ
F#にしとけって
でもこんなのはプログラマ以外が触るものだからしょうがないのかもな
F#にしとけって
でもこんなのはプログラマ以外が触るものだからしょうがないのかもな
664デフォルトの名無しさん (アウアウカー Sa6f-QofM)
2017/12/20(水) 19:00:00.85ID:sxNo8wqUa >>663
F#ってまだ生きてんのか!
F#ってまだ生きてんのか!
665デフォルトの名無しさん (スプッッ Sd52-GTd9)
2017/12/20(水) 19:51:25.83ID:7WhairgWd 生きてるし、活発に使われてるよ
ソースはない
ソースはない
666デフォルトの名無しさん (ワッチョイ 5303-FS+0)
2017/12/20(水) 20:52:44.38ID:EAMpcVD20 ソースはないソースはよ
667デフォルトの名無しさん (アウーイモ MM67-rH/H)
2017/12/21(木) 23:06:47.24ID:1PuX0k7mM 100列ぐらい続く計算エクセルがある
足したり引いたりするだけのエクセル。
酷くね?VBAにできないものか
足したり引いたりするだけのエクセル。
酷くね?VBAにできないものか
668デフォルトの名無しさん (アークセー Sx87-/hyL)
2017/12/22(金) 02:00:09.18ID:T3zOnX2zx >>667
計算エクセルっていう表現が意味不明だが要は計算用のワークシートのことか?
大抵の場合、ワークシート関数とテーブル機能を組み合わせて何とかする方がVBA使うより楽だぞ
車輪の再発明をしてもしょうがないからな
計算エクセルっていう表現が意味不明だが要は計算用のワークシートのことか?
大抵の場合、ワークシート関数とテーブル機能を組み合わせて何とかする方がVBA使うより楽だぞ
車輪の再発明をしてもしょうがないからな
669デフォルトの名無しさん (ワッチョイ cf93-RBuR)
2017/12/22(金) 04:21:53.41ID:0EXQoFbJ0 質問です。
Excel側からVBE上の指定のプロシージャ記述欄にジャンプする動作をVBAで記述できる
でしょうか?
やり方がわからずとりあえずSendKeysを組み合わせて動作するようになったのですが
不慮の事故が起きそうで怖いです。
VBEのオブジェクトモデルに沿ったアクセス方法があれば教えていただけないでしょうか。
Excel側からVBE上の指定のプロシージャ記述欄にジャンプする動作をVBAで記述できる
でしょうか?
やり方がわからずとりあえずSendKeysを組み合わせて動作するようになったのですが
不慮の事故が起きそうで怖いです。
VBEのオブジェクトモデルに沿ったアクセス方法があれば教えていただけないでしょうか。
670デフォルトの名無しさん (スプッッ Sd1f-Eeo6)
2017/12/22(金) 07:49:35.63ID:BCzwPGy5d >>669
VBE上でカーソルの位置をコントロールするってこと?
VBE上でカーソルの位置をコントロールするってこと?
671デフォルトの名無しさん (ワッチョイ 13aa-bqMz)
2017/12/22(金) 11:50:10.85ID:7Q1lZFEo0 >>670
メンテのために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からの操作が
知りたいのですが、うまく情報を見つけられないところです。
メンテのために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からの操作が
知りたいのですが、うまく情報を見つけられないところです。
672デフォルトの名無しさん (ワッチョイ 13aa-bqMz)
2017/12/22(金) 12:58:52.19ID:7Q1lZFEo0 >>669
自己解決しました。
キーワードを英語に切り替えてGGったら、StackOverFlowですぐ見つかりました。
.CodePane.GetSelection
.CodePane.SetSelection
あたりでなんとかなりそうです。お騒がせしました。
自己解決しました。
キーワードを英語に切り替えてGGったら、StackOverFlowですぐ見つかりました。
.CodePane.GetSelection
.CodePane.SetSelection
あたりでなんとかなりそうです。お騒がせしました。
673デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/22(金) 17:40:48.08ID:3J82DkVga VBAやりはじめて三年ぐらいだけど、For Eachで普通の配列もループできるの今日知ったわ
コレクションだけだと思ってた
コレクションだけだと思ってた
674デフォルトの名無しさん (スップ Sd1f-Eeo6)
2017/12/22(金) 18:05:37.66ID:/KqbyaeQd >>673
値の取得だけで設定はできないけどねー
値の取得だけで設定はできないけどねー
675デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/22(金) 18:16:05.21ID:3J82DkVga676デフォルトの名無しさん (アウアウカー Sac7-92zu)
2017/12/23(土) 00:05:26.91ID:/nzAEvVba677デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/23(土) 06:34:44.47ID:F3cHZlpp0 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
とはいるようにしたいです。実際作りたいものはもっと複雑ですが、とりあえず。
そこで、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
678デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/23(土) 06:43:21.92ID:F3cHZlpp0679デフォルトの名無しさん (ワッチョイ cfb9-bqMz)
2017/12/23(土) 07:46:11.28ID:8SavP0Th0 >>677
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then Target.Value = "ここ"
End Sub
クリックした場所に入れるだけならSheet1モジュールにこれで済むけど、コルーチン処理が必要というなら分からん。
いずれにしてもActiveCellとかActiveSheetとかは避けて設計すべき。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then Target.Value = "ここ"
End Sub
クリックした場所に入れるだけならSheet1モジュールにこれで済むけど、コルーチン処理が必要というなら分からん。
いずれにしてもActiveCellとかActiveSheetとかは避けて設計すべき。
680デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/23(土) 07:56:20.90ID:F3cHZlpp0 >>679
自分もググってたどりついた先がそれだったんですよね
でも常に発動してる状態だとやっぱり困るんですよ
一応application.enableevent を使って停止しておくこともできるようなので、
通常は停止しておくことも考えてはいます
設置したボタンを押したときだけ機能するようにしておけばいいのかな、と。
Worksheet_SelectionChange使う以外方法がなければそうするしかないですが
無効にしてる間はイベントが一切反応しなくなるという事なので、
イベント付きの他のブックを併用するようなケース等で問題が起きそうで迷ってます
自分もググってたどりついた先がそれだったんですよね
でも常に発動してる状態だとやっぱり困るんですよ
一応application.enableevent を使って停止しておくこともできるようなので、
通常は停止しておくことも考えてはいます
設置したボタンを押したときだけ機能するようにしておけばいいのかな、と。
Worksheet_SelectionChange使う以外方法がなければそうするしかないですが
無効にしてる間はイベントが一切反応しなくなるという事なので、
イベント付きの他のブックを併用するようなケース等で問題が起きそうで迷ってます
681デフォルトの名無しさん (ワッチョイ cfb9-bqMz)
2017/12/23(土) 08:00:18.36ID:8SavP0Th0682デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/23(土) 08:11:12.55ID:F3cHZlpp0683デフォルトの名無しさん (ワッチョイ cffa-buzn)
2017/12/23(土) 10:35:36.95ID:oVsH3Gmz0 フォームコントロールボタンの文字の色を変えたいんだけど
セレクトしない方法はないのですか?
Sub test01()
n = Worksheets("Sheet1").Shapes("Button 1").Name
Worksheets("Sheet1").Shapes(n).Select
Selection.Font.ColorIndex = 3
End Sub
セレクトしない方法はないのですか?
Sub test01()
n = Worksheets("Sheet1").Shapes("Button 1").Name
Worksheets("Sheet1").Shapes(n).Select
Selection.Font.ColorIndex = 3
End Sub
684デフォルトの名無しさん (ワッチョイ 73e3-chJT)
2017/12/23(土) 10:51:51.14ID:YCHexesv0 フォームコントロールボタンの文字の色を変えたいんだけど
セレクトしない方法はないのですか?
Set n = Worksheets("Sheet1").Shapes("Button 1")
n.Font.ColorIndex = 3
みたいな?
セレクトしない方法はないのですか?
Set n = Worksheets("Sheet1").Shapes("Button 1")
n.Font.ColorIndex = 3
みたいな?
685デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/23(土) 13:25:10.14ID:Zcbsqwvta シート上のボタンならtoggleにしなくてもモジュールレベルのクリックフラグ変数で管理できねーか?
686デフォルトの名無しさん (ワッチョイ cfb9-bqMz)
2017/12/23(土) 13:35:38.33ID:8SavP0Th0 >>685
出来合いのものを、わざわざ回避する利点は?
出来合いのものを、わざわざ回避する利点は?
687デフォルトの名無しさん (ワッチョイ c3b3-cQ+C)
2017/12/23(土) 15:32:28.22ID:tRk+L7lt0688デフォルトの名無しさん (アウアウカー Sac7-92zu)
2017/12/23(土) 18:23:21.18ID:3q2JAS6ba689デフォルトの名無しさん (アウアウカー Sac7-92zu)
2017/12/23(土) 18:24:04.16ID:3q2JAS6ba すまん。
>>683向けね。
>>683向けね。
690デフォルトの名無しさん (ワッチョイ 6f9f-7LW1)
2017/12/23(土) 19:38:10.94ID:DrTFst260 >>683
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オブジェクトを持っているヤツまで掘り下げてかなければダメ
ということだと思う。
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オブジェクトを持っているヤツまで掘り下げてかなければダメ
ということだと思う。
691デフォルトの名無しさん (アークセー Sx87-/hyL)
2017/12/23(土) 19:53:54.32ID:AF0984djx >>690
直感的な説明だが、オブジェクトがオブジェクトを持つという表現は間違い
オブジェクトが持つのはあくまでメソッドとプロパティからなるメンバで、いわゆる下位オブジェクトにはメンバを介してアクセスしてるだけだからな
直感的な説明だが、オブジェクトがオブジェクトを持つという表現は間違い
オブジェクトが持つのはあくまでメソッドとプロパティからなるメンバで、いわゆる下位オブジェクトにはメンバを介してアクセスしてるだけだからな
692デフォルトの名無しさん (ワッチョイ cffa-buzn)
2017/12/23(土) 20:15:31.85ID:oVsH3Gmz0693デフォルトの名無しさん (ワッチョイ 6f9d-FmKA)
2017/12/23(土) 20:55:59.08ID:afY4COyy0 ちなみにButtonsとかCheckBoxesとかは隠しプロパティ
ヘルプにもでてこないからな
なんで隠してあるのかねぇ
ヘルプにもでてこないからな
なんで隠してあるのかねぇ
694デフォルトの名無しさん (アウアウカー Sac7-92zu)
2017/12/24(日) 00:26:44.47ID:oSJcOqyea695デフォルトの名無しさん (ワッチョイ 93f7-vrKU)
2017/12/24(日) 00:45:00.70ID:BN72T8jr0 まあ、大多数の用途では得られるメリットが少なすぎてSelectを消す意味は薄いけどな
696デフォルトの名無しさん (アークセー Sx87-/hyL)
2017/12/24(日) 01:23:50.46ID:2PxYmIQzx オブジェクトのプロパティにアクセスする処理でSelectメソッドはなるべく使わない
コードの実行中にデバッグ作業を行ったときなどに予期しないオブジェクトが選択されて、アクセスしたいプロパティにアクセス出来ずエラーになることがよくあるからね
Rangeオブジェクトを指定していたはずがShapeオブジェクトやOLEObjectオブジェクトを選んでいたりとか
コードの実行中にデバッグ作業を行ったときなどに予期しないオブジェクトが選択されて、アクセスしたいプロパティにアクセス出来ずエラーになることがよくあるからね
Rangeオブジェクトを指定していたはずがShapeオブジェクトやOLEObjectオブジェクトを選んでいたりとか
697デフォルトの名無しさん (ワッチョイ cfb9-bqMz)
2017/12/24(日) 01:43:15.08ID:O2udkTbW0 Selectは必ず代替手段があるから、範囲選択してユーザーに注意を促すとかでなけりゃSelect使う事に疑問を持った方がいい。
698デフォルトの名無しさん (ワッチョイ 6fe0-615/)
2017/12/24(日) 06:22:03.30ID:ZKd7S1fn0 起動中の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オブジェクトを取得する方法は無いでしょうか
他に方法があれば、ハンドルから取得する方法にこだわりません
ただし、諸事情により外部からライブラリをダウンロードしてきて使用する、といったことはできないです
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オブジェクトを取得する方法は無いでしょうか
他に方法があれば、ハンドルから取得する方法にこだわりません
ただし、諸事情により外部からライブラリをダウンロードしてきて使用する、といったことはできないです
699デフォルトの名無しさん (ワッチョイ 93f7-vrKU)
2017/12/24(日) 08:15:14.57ID:BN72T8jr0700デフォルトの名無しさん (ワッチョイ 6f9f-WV/z)
2017/12/24(日) 11:59:50.98ID:uwQxUsVy0 IEが複数あるかもしれないのに見つかったら抜けちゃうコードで何かおかしいと感じないの?
701デフォルトの名無しさん (ワッチョイ ff8a-EmoC)
2017/12/24(日) 15:06:20.77ID:6Phr71Y20 Dim u As Long
Range("A1", "I5").Value = u
u = Round(u, 4)
四捨五入したいのに全部ゼロになる!
Range("A1", "I5").Value = u
u = Round(u, 4)
四捨五入したいのに全部ゼロになる!
702デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/24(日) 15:18:15.83ID:CcW1Sn5Aa >>701
uには何が入るの?
uには何が入るの?
703デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/24(日) 15:18:38.84ID:CcW1Sn5Aa てか、そりゃゼロになるだろw
704デフォルトの名無しさん (アウアウカー Sac7-92zu)
2017/12/24(日) 15:27:49.11ID:dho/ilxra 何かが逆でワロタ。
705デフォルトの名無しさん (ワッチョイ ff8a-EmoC)
2017/12/24(日) 15:36:05.76ID:6Phr71Y20706デフォルトの名無しさん (アウアウカー Sac7-92zu)
2017/12/24(日) 15:53:02.16ID:sjlc/tcta >>705
A1からI5の範囲に初期化したばかりのu(=0)を入れてる。
入れるのは逆で、入れた後で桁変更して戻す必要もある。
最初からuを使わずに自分自身に桁変更した自分を入れる方が普通かな。
そもそも見た目だけ桁指定する方が一般的だと思うが。
A1からI5の範囲に初期化したばかりのu(=0)を入れてる。
入れるのは逆で、入れた後で桁変更して戻す必要もある。
最初からuを使わずに自分自身に桁変更した自分を入れる方が普通かな。
そもそも見た目だけ桁指定する方が一般的だと思うが。
707デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/24(日) 15:54:56.74ID:CcW1Sn5Aa 桁指定したいならexcel vba 書式設定
でググりなさい
でググりなさい
708デフォルトの名無しさん (アウアウカー Sac7-92zu)
2017/12/24(日) 15:56:16.29ID:CBEBXlX2a というか、値が複数(配列)だから一発でいけないだろ。
709デフォルトの名無しさん (ワッチョイ 03d2-oA/d)
2017/12/24(日) 15:56:53.27ID:JTJf6bSC0 それぞれの行の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
すべて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
710デフォルトの名無しさん (アークセー Sx87-/hyL)
2017/12/24(日) 16:09:57.86ID:U3mSSLWjx >>709
数式書き込んでるループ内の処理の右辺を
"=$B" & i & "-" & "$C" & i
にするだけ
折角行インデックスをiで指定してループ回してるんだから使わないと
この程度のことだったらVBA使わなくても組み込みのテーブル機能で実現できるけどね
数式書き込んでるループ内の処理の右辺を
"=$B" & i & "-" & "$C" & i
にするだけ
折角行インデックスをiで指定してループ回してるんだから使わないと
この程度のことだったらVBA使わなくても組み込みのテーブル機能で実現できるけどね
711デフォルトの名無しさん (ワッチョイ cfb9-bqMz)
2017/12/24(日) 16:11:04.02ID:O2udkTbW0 >>709
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
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
712デフォルトの名無しさん (ワッチョイ 03d2-oA/d)
2017/12/24(日) 16:13:21.90ID:JTJf6bSC0713デフォルトの名無しさん (ワッチョイ 6fe0-615/)
2017/12/24(日) 17:56:35.14ID:ZKd7S1fn0 >>699-700
コードはあくまでも例で、実際はURLや文書内の文字列から判定しています
今回問題なのは、CreateObject("Shell.Application").WindowsをFor Eachで全要素を調べても、要素にそもそも含まれていない点です
IEの子窓として存在しており、タスクマネージャーで調べるとプロセスも存在するのに、IEオブジェクトを取得できません
しかし、WindowsAPIのFindWindowを用いるとハンドルの取得は可能だったので、
Set objIE = MAGIC(hWnd)のような形でハンドルからIEオブジェクトを取得する関数を作れないか質問させていただきました
コードはあくまでも例で、実際はURLや文書内の文字列から判定しています
今回問題なのは、CreateObject("Shell.Application").WindowsをFor Eachで全要素を調べても、要素にそもそも含まれていない点です
IEの子窓として存在しており、タスクマネージャーで調べるとプロセスも存在するのに、IEオブジェクトを取得できません
しかし、WindowsAPIのFindWindowを用いるとハンドルの取得は可能だったので、
Set objIE = MAGIC(hWnd)のような形でハンドルからIEオブジェクトを取得する関数を作れないか質問させていただきました
714デフォルトの名無しさん (ワッチョイ ff23-9Igo)
2017/12/24(日) 19:48:46.67ID:TDjZS1ex0 Excel2010です
以下のコードを実行すると、"$A$2"が表示されます。
セル範囲に添字0を付けた場合、セル範囲の先頭セルが参照される
(この場合B2)と思い込んでいたのですが、私の誤りでしょうか?
MsgBox(worksheets(1).range("B2:C3")(0).address)
以下のコードを実行すると、"$A$2"が表示されます。
セル範囲に添字0を付けた場合、セル範囲の先頭セルが参照される
(この場合B2)と思い込んでいたのですが、私の誤りでしょうか?
MsgBox(worksheets(1).range("B2:C3")(0).address)
715デフォルトの名無しさん (ワッチョイ 6fc5-buzn)
2017/12/24(日) 21:16:40.55ID:ODr8GH0o0 0 じゃなく 1
716デフォルトの名無しさん (ワッチョイ ff23-9Igo)
2017/12/24(日) 22:01:25.06ID:TDjZS1ex0717デフォルトの名無しさん (ワッチョイ 03bd-EmoC)
2017/12/24(日) 22:44:17.96ID:4FfGU/eI0 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は文字列で〇〇は月を二桁表示)
抽出できた今月ファイルをコピーして名前の〇〇を翌月に変更したもの(翌月ファイル)を同フォルダ内に作成したいです
コピー元ファイル名を継承して一部だけ変更する良い方法が見つからなかったので教えてください
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は文字列で〇〇は月を二桁表示)
抽出できた今月ファイルをコピーして名前の〇〇を翌月に変更したもの(翌月ファイル)を同フォルダ内に作成したいです
コピー元ファイル名を継承して一部だけ変更する良い方法が見つからなかったので教えてください
718デフォルトの名無しさん (アウアウカー Sac7-92zu)
2017/12/24(日) 23:29:24.13ID:XB6s5ekxa >>712
そのセル全部のRangeに対して"=B2-C2"でいける。
そのセル全部のRangeに対して"=B2-C2"でいける。
719デフォルトの名無しさん (ワッチョイ cfb9-bqMz)
2017/12/25(月) 00:16:31.32ID:2KDGjSox0 >>717
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
試してないけどこんな感じかなぁ。
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
試してないけどこんな感じかなぁ。
720デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/25(月) 08:06:21.04ID:fMKsEfdQa >>717
fileName = Replace(fileName,○○,××)
fileName = Replace(fileName,○○,××)
721デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/25(月) 08:07:54.57ID:fMKsEfdQa ああ、AAAとBBBに数字がない前提じゃないとダメだな
722717 (ブーイモ MMff-pp+B)
2017/12/25(月) 12:59:33.91ID:5/ecyLcnM723デフォルトの名無しさん (ワッチョイ ff7f-SZyW)
2017/12/25(月) 16:18:43.87ID:dIh/hlW50 んんんんあああああああああああああああああああああああああああああああああ
724デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/25(月) 16:44:33.34ID:DuOFgh3Va コピーしてファイル名置換するだけでしょ?
フォルダもすでに取得してるなら
fso.copyfile file.Path,folder.Path & "\" & Replace(file.Name,"○○","××")
だけで行けるんじゃね
フォルダもすでに取得してるなら
fso.copyfile file.Path,folder.Path & "\" & Replace(file.Name,"○○","××")
だけで行けるんじゃね
725デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/25(月) 17:30:49.11ID:1470x9yD0 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があるにも関わらずこのエラー表示
解決法はありますか?
誤った選択をしてしまった場合に備え、戻るボタンも作るとします
○UserForm1の「次へ」ボタンのクリックイベントに以下のように記述しました
Me.Hide
UserForm2.Show
○そしてUserForm2の「戻る」ボタンのクリックイベントには以下のように
Me.Hide
UserForm1.Show
うまくいったと思いきや、一度1に戻ってからもう一度UserForm2を再表示させると
UserForm2のinitializeに書いた処理が実行されません。
仕方が無いので1の次へに
UserForm2.Show
Unload Me
と書いてみると、今度は2から戻る時に、「フォームは既に表示されています。モーダルに表示できません」と出ます
2の「戻る」には上に書いたようにMe.Hideがあるにも関わらずこのエラー表示
解決法はありますか?
726デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/25(月) 17:46:45.39ID:DuOFgh3Va727デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/25(月) 17:48:18.57ID:1470x9yD0 いやいや何か間違えてる
修正
仕方が無いので2の「戻る」に
UserForm1.Show
Unload Me
と書いてみると、今度は1から2にもう一度行こうとすると、「フォームは既に表示されています。モーダルに表示できません」と出ます
ついでにとにかくhideは避けてすべてunloadにしてもやはり2→1の段階で同じアラート
解決法はありますか?
修正
仕方が無いので2の「戻る」に
UserForm1.Show
Unload Me
と書いてみると、今度は1から2にもう一度行こうとすると、「フォームは既に表示されています。モーダルに表示できません」と出ます
ついでにとにかくhideは避けてすべてunloadにしてもやはり2→1の段階で同じアラート
解決法はありますか?
728デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/25(月) 17:48:59.15ID:1470x9yD0729デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/25(月) 18:01:10.24ID:1470x9yD0730デフォルトの名無しさん (ワッチョイ 03bd-EmoC)
2017/12/25(月) 22:53:06.92ID:S4ukHgvI0 sub test()
'マクロ起動用エクセルがあるフォルダ内のフォルダ名の取得
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の数字を使えなかったりエクセル以外も取得できるのでまだ改良が必要そうです
'マクロ起動用エクセルがあるフォルダ内のフォルダ名の取得
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の数字を使えなかったりエクセル以外も取得できるのでまだ改良が必要そうです
731デフォルトの名無しさん (アークセー Sx87-/hyL)
2017/12/25(月) 23:30:15.25ID:63usksBrx >>730
ファイルの種類に関しては、ループ処理の冒頭でFSO.GetExtensionName(f.Path)の戻り値を調べて処理を分岐させるようにすれば、狙った種類のファイルだけを処理できるようになると思うよ
ファイルの種類に関しては、ループ処理の冒頭でFSO.GetExtensionName(f.Path)の戻り値を調べて処理を分岐させるようにすれば、狙った種類のファイルだけを処理できるようになると思うよ
732デフォルトの名無しさん (ワッチョイ 637b-fQzT)
2017/12/25(月) 23:37:14.60ID:aEhB4dZD0 ググったのですがどうしてもわからないので教えてください
【環境】Windows10、Excel2010
【不具合症状】新規コードの作成ができない
新規bookを作成し、VBEを起動した際、通常はプロジェクトウィンドウに
「Sheet1-3」が表示されるかと思いますが、真っ白なまま何も表示されない状態です。
メニューの「挿入」をクリックしても、標準モジュールがグレイアウトになってしまい、
新規コードの作成が行えない状態です。
ITに相談しても初めての事例とのことでわかりませんでした。
コンパネからのofficeの修復も行いましたが改善されません。
マクロのセキュリティは「全て有効」で設定されています。
xlsm形式で保存もしてみましたがダメでした。
PC再起動も試してみました。
同一PCで、既存作成マクロの実行は行えます。
既存マクロのVBEを起動した際、プロジェクトウィンドウやコードウィンドウは
普通に見えますが、コードウィンドウで1文字でも編集すると、F5実行時に
「ファイルが見つかりません」とのエラーが出ます。ステップ実行でも同じです。
編集は例えコメント行でも同じエラーが出ます。
新規作成は全てにおいて不可です。
自動記録をしようとすると「マクロが記録できませんでした」とエラーが出ます。
マクロの作成ボタンは押せますが、押してもコードウィンドウが起動しません。
新規作成と編集が制限されているようなのですが、どこから変更するのかが
どうしてもわかりませんでした。もしわかる方いらしたら教えていただけないでしょうか?
スレチであれば、該当スレッドに誘導していただけると助かります。
よろしくお願いします。
【環境】Windows10、Excel2010
【不具合症状】新規コードの作成ができない
新規bookを作成し、VBEを起動した際、通常はプロジェクトウィンドウに
「Sheet1-3」が表示されるかと思いますが、真っ白なまま何も表示されない状態です。
メニューの「挿入」をクリックしても、標準モジュールがグレイアウトになってしまい、
新規コードの作成が行えない状態です。
ITに相談しても初めての事例とのことでわかりませんでした。
コンパネからのofficeの修復も行いましたが改善されません。
マクロのセキュリティは「全て有効」で設定されています。
xlsm形式で保存もしてみましたがダメでした。
PC再起動も試してみました。
同一PCで、既存作成マクロの実行は行えます。
既存マクロのVBEを起動した際、プロジェクトウィンドウやコードウィンドウは
普通に見えますが、コードウィンドウで1文字でも編集すると、F5実行時に
「ファイルが見つかりません」とのエラーが出ます。ステップ実行でも同じです。
編集は例えコメント行でも同じエラーが出ます。
新規作成は全てにおいて不可です。
自動記録をしようとすると「マクロが記録できませんでした」とエラーが出ます。
マクロの作成ボタンは押せますが、押してもコードウィンドウが起動しません。
新規作成と編集が制限されているようなのですが、どこから変更するのかが
どうしてもわかりませんでした。もしわかる方いらしたら教えていただけないでしょうか?
スレチであれば、該当スレッドに誘導していただけると助かります。
よろしくお願いします。
733デフォルトの名無しさん (アウアウイー Sa87-REpE)
2017/12/26(火) 01:59:52.47ID:fIC/1lmja >>732
エクセルのレジストリ削除してみてもダメ?
エクセルのレジストリ削除してみてもダメ?
734デフォルトの名無しさん (ワッチョイ 6f9d-FmKA)
2017/12/26(火) 06:55:25.36ID:cWcYrW8d0735デフォルトの名無しさん (ワッチョイ cf80-fDvV)
2017/12/26(火) 06:58:32.09ID:gkP6o6Ks0 >>717
「01月」というファイル名のコピーが、「02月」として、同じフォルダに入れるのか
フォルダ内に、「01月」「02月」があるとして、
この状態で、もう一度、同じ事をするなよ!w
設計として、同じフォルダに入れるのはおかしい。
異なるフォルダに入れるべき
わかりやすいように投稿する時は、名前欄に、717 と入れてくれ
「01月」というファイル名のコピーが、「02月」として、同じフォルダに入れるのか
フォルダ内に、「01月」「02月」があるとして、
この状態で、もう一度、同じ事をするなよ!w
設計として、同じフォルダに入れるのはおかしい。
異なるフォルダに入れるべき
わかりやすいように投稿する時は、名前欄に、717 と入れてくれ
736デフォルトの名無しさん (ワッチョイ 637b-7LW1)
2017/12/26(火) 07:54:39.17ID:6qOsufVw0737デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/26(火) 08:20:51.65ID:upqov7ALa738デフォルトの名無しさん (ワッチョイ ff23-pwf+)
2017/12/27(水) 09:27:07.83ID:58xyBvha0 >>719とか>>730とかのコードで意味わかんないところがいくつかある
(コードが間違ってるって意味じゃなくて、こっちの知識が足りなくて理解が追い付かないって意味です)
まず>>719は
なんでコレクションを宣言してるのか?
しかもなぜ宣言したのに使わないのか?
変数eは何のために使ってるのか?
ファイルのパスをsplitで分割してるけど、
ファイル名だったらinstrrevで\を探したほうが話が早いんじゃないか?
等々
>>730は
ループの中でdim使うのは大丈夫なの?
複数回宣言したらエラーになりそう
後、一番知りたいのが
If strFolder <> "." And strFolder <> ".." Then
これ、どういう意味なのか解説をお願いしたい
(書いてる人たちにケチつけてるんじゃなくて、本当に分らない事を教えて欲しいだけです)
どなたか教えてください、よろしくお願いします
(コードが間違ってるって意味じゃなくて、こっちの知識が足りなくて理解が追い付かないって意味です)
まず>>719は
なんでコレクションを宣言してるのか?
しかもなぜ宣言したのに使わないのか?
変数eは何のために使ってるのか?
ファイルのパスをsplitで分割してるけど、
ファイル名だったらinstrrevで\を探したほうが話が早いんじゃないか?
等々
>>730は
ループの中でdim使うのは大丈夫なの?
複数回宣言したらエラーになりそう
後、一番知りたいのが
If strFolder <> "." And strFolder <> ".." Then
これ、どういう意味なのか解説をお願いしたい
(書いてる人たちにケチつけてるんじゃなくて、本当に分らない事を教えて欲しいだけです)
どなたか教えてください、よろしくお願いします
739デフォルトの名無しさん (ワッチョイ ff1e-bqMz)
2017/12/27(水) 09:45:06.41ID:fOQst04i0740デフォルトの名無しさん (ワッチョイ ff1e-bqMz)
2017/12/27(水) 10:22:00.13ID:fOQst04i0 寝ぼけて書いてたからめちゃくちゃだな^^;
c:\test\test1> というフォルダがあったとしてそこで
c:\test\test1>cd .. と打てば
c:\test> と親ディレクトリ(フォルダ)に移動する
c:\test\test1> というフォルダがあったとしてそこで
c:\test\test1>cd .. と打てば
c:\test> と親ディレクトリ(フォルダ)に移動する
741デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/27(水) 10:45:52.46ID:90Vjgj1Fa >>738
ループ内でDimしてもエラーにはならないよ
その都度メモリが割り当てられるだけじゃないかな
フォルダ名の"."と".."は相対パスじゃなかったかな
一個上と二個上の親フォルダだったと思う
間違ってるかもしれないから調べてね
ループ内でDimしてもエラーにはならないよ
その都度メモリが割り当てられるだけじゃないかな
フォルダ名の"."と".."は相対パスじゃなかったかな
一個上と二個上の親フォルダだったと思う
間違ってるかもしれないから調べてね
742デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/27(水) 10:46:46.56ID:90Vjgj1Fa あ、間違ってたw
.がカレントフォルダで..がひとつ上の親フォルダね
すんませんな
.がカレントフォルダで..がひとつ上の親フォルダね
すんませんな
743デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/27(水) 10:48:05.37ID:90Vjgj1Fa あとsplitの問題に関しては読みやすさとか書きやすさじゃね
俺もよくやる
楽だからね
俺もよくやる
楽だからね
744デフォルトの名無しさん (ワッチョイ cf80-fDvV)
2017/12/27(水) 12:51:59.50ID:u0gTyM9V0 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 と入れてくれ
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 と入れてくれ
745744 (ワッチョイ cf80-fDvV)
2017/12/27(水) 12:58:13.04ID:u0gTyM9V0 間違っていたので、修正した
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月い
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月い
746デフォルトの名無しさん (ワッチョイ ffb3-7LW1)
2017/12/27(水) 13:38:32.87ID:lJNZ7xHQ0 VBA勉強し始めて間もない時に組んだマクロに
replaceという名前のプロシージャを作りました
そのことはすっかり忘れてたのですが、最近になってそのマクロを手直しする必要があって
その中でReplace関数を使おうとしたらエラーが出る
おかしいなと思い調べてみたらSub replace() を発見
プロシージャの名前を変えたら大丈夫かと思いきやなぜかどこかに何かが残っているようでエラーがでる
一旦そのモジュールを解放したらReplace関数は使えるようにはなりました
しかし、なぜかReplaceと打ってもreplaceとなる
replaceと打ってもそのままreplace
replaceをReplace関数と認識してくれてはいるものの、どこかに何かが残っている
他のブックでは起きないのでまぁそれほど支障はないものの、もし分かる方いらっしゃったら
どうすればいいか教えてください
replaceという名前のプロシージャを作りました
そのことはすっかり忘れてたのですが、最近になってそのマクロを手直しする必要があって
その中でReplace関数を使おうとしたらエラーが出る
おかしいなと思い調べてみたらSub replace() を発見
プロシージャの名前を変えたら大丈夫かと思いきやなぜかどこかに何かが残っているようでエラーがでる
一旦そのモジュールを解放したらReplace関数は使えるようにはなりました
しかし、なぜかReplaceと打ってもreplaceとなる
replaceと打ってもそのままreplace
replaceをReplace関数と認識してくれてはいるものの、どこかに何かが残っている
他のブックでは起きないのでまぁそれほど支障はないものの、もし分かる方いらっしゃったら
どうすればいいか教えてください
747デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/27(水) 13:47:19.08ID:fCTi8N3va Replaceで変数宣言してみ
748デフォルトの名無しさん (ワンミングク MM9f-tu6d)
2017/12/27(水) 15:20:29.55ID:DW1nj5RcM >>746
大文字小文字は、現在開いてるコード全体で統一されてしまうからな。
変数でもプロシャージャでもいいから、定義し直すと内部で覚えてる大文字小文字が上書きされるぽ
この仕様のせいで、他人の書いたブック開いたまま修正保存するといつのまにか変わってたりする。
するとWinMergeとかでDIFFしたときにイラッ
独り言でした
大文字小文字は、現在開いてるコード全体で統一されてしまうからな。
変数でもプロシャージャでもいいから、定義し直すと内部で覚えてる大文字小文字が上書きされるぽ
この仕様のせいで、他人の書いたブック開いたまま修正保存するといつのまにか変わってたりする。
するとWinMergeとかでDIFFしたときにイラッ
独り言でした
749デフォルトの名無しさん (アウーイモ MM67-dNkK)
2017/12/27(水) 18:43:06.62ID:8Kp24ZKYM プロシージャ外に書いたオブジェクトの寿命はいつまでなのでしょうか?
グローバル変数にオブジェクトを保存してそれをfunctionで返すシングルトンオブジェクトを作ったのですが、
プログラムが一度終了して再度起動した際もオブジェクトが残っており、ゴミデータでエラーが起きています。
一度ファイルを全て閉じるまでは残るものなのでしょうか?
グローバル変数にオブジェクトを保存してそれをfunctionで返すシングルトンオブジェクトを作ったのですが、
プログラムが一度終了して再度起動した際もオブジェクトが残っており、ゴミデータでエラーが起きています。
一度ファイルを全て閉じるまでは残るものなのでしょうか?
750デフォルトの名無しさん (アウアウイー Sa87-cQ+C)
2017/12/27(水) 18:55:21.26ID:K6GLaCg8a >>749
グローバル変数ならエラーで止まるかブックが生きてる限りは生きてるんじゃね
グローバル変数ならエラーで止まるかブックが生きてる限りは生きてるんじゃね
751デフォルトの名無しさん (JP 0H27-amUm)
2017/12/27(水) 19:03:21.38ID:4eyrVwN9H >>749
あとEndで止めると死ぬ
あとEndで止めると死ぬ
752デフォルトの名無しさん (スップ Sd1f-Eeo6)
2017/12/27(水) 20:23:28.17ID:ry3vSREld >>751
End なあ、せめて Class_Terminate()して欲しかった
End なあ、せめて Class_Terminate()して欲しかった
753デフォルトの名無しさん (ワッチョイ ffeb-7LW1)
2017/12/27(水) 20:40:54.92ID:RyDVOJzS0 >>732 です。
officeの再インストール試してみましたが
不具合解消せずでした・・・・無念
幸い既存マクロは動くので、新規作成と実行は
他のPCでやることにしました。
不具合はExcelだけで、Accessでは特に問題ありませんでした。
一応ご報告まで。
officeの再インストール試してみましたが
不具合解消せずでした・・・・無念
幸い既存マクロは動くので、新規作成と実行は
他のPCでやることにしました。
不具合はExcelだけで、Accessでは特に問題ありませんでした。
一応ご報告まで。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- 20代の3割が「テレビ見ない」現実…そして静かに広がる「究極のテレビ離れ」とは [muffin★]
