Dim path As String ,buf As String, i As Long Dim mysheet As Worksheet, srcbook As Workbook, srcsheet As Worksheet
With Application.FileDialog(msoFileDialogFolderPicker)'フォルダを選択する If .Show = 0 Then MsgBox "キャンセルされました。" Exit Sub End If path = .SelectedItems(1) End With
Set mysheet = ThisWorkbook.Worksheets("comp") buf = Dir(path & "B*.xls")
でぐぐる 0409蟻人間 ◆T6xkBnTXz7B0 2020/05/31(日) 04:00:28.58ID:KExNe49d エクセルにはリファレンスマニュアルが付属していて、追加でインストールするとF1ヘルプで言語仕様まで見られる。 マニュアルがパソコンに入ってなかったら、管理者からエクセルのシーディーを借りてね。 0410デフォルトの名無しさん2020/05/31(日) 05:00:56.16ID:pJwiV8F0>>398 sub() って文法的に作れないはず マクロが動かないのは文字列のせいじゃないかもよ 0411デフォルトの名無しさん2020/05/31(日) 08:40:31.29ID:6kaO8G32 ごめんなさい sub test ()でした 0412デフォルトの名無しさん2020/05/31(日) 08:57:53.05ID:C8J9R7KI Sub Test0001() Dim i As Integer
For i = 1 To 2 Dim ary()
MsgBox "ここにブレークポイント設定"
ary = Sheet1.Range(Cells(1, i), Cells(5, i)) Next i End Sub
こうやってForの中でaryを宣言し直せば、aryは初期化されると思い込んでたんだけどダメなのな 2回目にMsgBoxで止まったときにaryみるとA列のデータがaryに残ってしまってる これってメモリ上に残ってて同じ所を参照し直すからなのかな Eraseすれば消えるからいいんだけど、気づくのに時間かかったわ こんな初歩的なこと分かってないでよく今まで組んできたもんだ 0413デフォルトの名無しさん2020/05/31(日) 09:44:52.93ID:8XtoheO9 すんません今時ブロックスコープない方がアレなんで 0414デフォルトの名無しさん2020/05/31(日) 09:49:53.97ID:4iioSPSZ>>398 それはLEFT()が動かないのと同じ理屈。 普通LEFT(A1,5)とか書くから。 0415デフォルトの名無しさん2020/05/31(日) 10:44:01.62ID:GCI/GpSg>>412 そういう動作を知るためのテストなんじゃね 残っていても上書きされるんだから問題ないし 0416デフォルトの名無しさん2020/05/31(日) 10:47:02.74ID:GCI/GpSg>>411 sub test("文字列") ってことか? 0417デフォルトの名無しさん2020/05/31(日) 11:53:35.71ID:df9CBrpd>>398 呼び出し元とプロシージャそれぞれ一行ずつ書いてくれよ 0418デフォルトの名無しさん2020/05/31(日) 12:34:25.47ID:GcFwCYXw>>412 VBAのDimは書いた場所に関係なく、コード開始時に1回だけ実行される仕様 モジュールの最後に書いても結果は変わらない Sub Test() Dim a() For i = 0 To 9 Dim b() Next Dim c() End Sub 0419デフォルトの名無しさん2020/05/31(日) 12:42:20.77ID:C8J9R7KI>>413 あーなるほど そこを考えるんですか、勉強になりましたわ ただ、改めて疑問に思ったのは、同じブロックスコープ内で再度宣言してもエラーでないのはどういうことなんだろーとか Forの中での宣言だと繰り返しといっても宣言部分は無視されるってことかな ま、同じ事しないようにちゃんとおぼえておこ・・・
すみませんが教えていただけないでしょうか。 0426蟻人間 ◆T6xkBnTXz7B0 2020/05/31(日) 17:39:48.04ID:w6MuXuh+>>425 Excel for Windows 95で動作確認。
Sub Record1() Application.Worksheets(1).Select For I = 5 To 20 For J = 1 To 20 Cells(J, I).Select ActiveCell.FormulaR1C1 = Val(ActiveCell.FormulaR1C1) * 1.1 Next J Next End Sub 0427蟻人間 ◆T6xkBnTXz7B0 2020/05/31(日) 17:50:31.21ID:w6MuXuh+>>426 「To 20」のところは適当に変更してね。 0428デフォルトの名無しさん2020/05/31(日) 18:34:56.03ID:Gn3uBA4V>>425 選択した範囲が処理の起点なので、、
Dim r As Range For Each r In Selection If r.colunm < 5 Then GoTo nextLoop If r.Value = "" Then GoTo nextLoop
r.Value = r.Value * 1.1 nextLoop: Next
こんな感じ? 行全体を対象にしたいみたいだけど、その時はFor文の前に
Selection.EntireRow.Select
を差し込めばいい。 1万列処理されるけど、、、 0429デフォルトの名無しさん2020/05/31(日) 18:39:34.39ID:Gn3uBA4V>>428 綴りを間違っとった If r.Column < 5 Then GoTo nextLoop
文字列セルを避けたければ、、以下も追加 If Not IsNumeric(r.Value) Then GoTo nextLoop 0430デフォルトの名無しさん2020/05/31(日) 19:13:07.80ID:4iioSPSZ>>424 ああつらい。 上司がメール読まないタイプだと特に。 0431デフォルトの名無しさん2020/05/31(日) 21:17:59.30ID:yITbq02Q 馬鹿に馬鹿が答えて滅茶苦茶 簡単な質問だとしゃしゃり出てくるからおかしくなる 0432デフォルトの名無しさん2020/05/31(日) 22:48:28.20ID:6kaO8G32>>416 そうです!! カッコ内に文字列です! 0433デフォルトの名無しさん2020/05/31(日) 22:49:04.73ID:6kaO8G32>>417 呼び出し元…すみません、知識不足でした… 0434デフォルトの名無しさん2020/05/31(日) 23:06:33.42ID:2V+gQfrN>>433 馬鹿には無理だと悟れよ、馬鹿 0435デフォルトの名無しさん2020/06/01(月) 18:21:12.15ID:JWhdLJJl お前もだ 0436デフォルトの名無しさん2020/06/01(月) 18:38:31.30ID:4Uk/Vywe 異動した先輩が作ったマクロに少し追加しようと思って標準モジュール見てみたら 乱れ雪月花 地ずり残月 かすみ二段 パリィ 何これ???と思ったらゲームの技名なのか 見事なプロシージャだけど関連性が全くわからんかった… 0437デフォルトの名無しさん2020/06/01(月) 18:48:48.99ID:jizMt7mj Sub 乱れ雪月花 風雪即意付け 月影の太刀 三花仙 End Sub 0438デフォルトの名無しさん2020/06/01(月) 19:40:30.70ID:o1fpUPSE 取り敢えずマジックナンバーだらけのを保守しろとかいうのはやめてー セル参照も起点ぐらいは定数宣言しといて欲しい 0439デフォルトの名無しさん2020/06/01(月) 19:48:00.59ID:xzpno8fJ 1列目の2行目から下にEXCELファイル名があります。(同一ファイル名あり) それらを全て開く、処理、閉じるを繰り返すと時間がかかるので、同一ファイル名は一度だけ開いて閉じるをやりたいのですがどしたらいいですか?