[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2ch.scのread.cgiへ]
Update time : 10/02 16:58 / Filesize : 123 KB / Number-of Response : 456
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part68



1 名前:デフォルトの名無しさん [2020/08/30(日) 11:55:27.33 ID:Oy/VxFsh0.net]
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part67
https://mevius.5ch.net/test/read.cgi/tech/1593104489/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

223 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 16:13:39.65 ID:qEgHhc430.net]
VB6だとScreen.TwipsPerPixelXってあったんだがなあ

VBAだとPointsToScreenPixelsXとかあるなと思ってみてみたけど、これ、つねに72DPIで計算するっぽいな

224 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 18:44:31.89 ID:+9zmYtvxd.net]
>>192
それだと1回めの選択範囲で動いて、移動したら動きますよね?
1回目の行や列を記憶させて2回目で比較する感じですか?

225 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 22:11:41.98 ID:L6SxevYWd.net]
>>222
>>223
うん、その辺みんな知ってるけどTreeViewの問題って違ってたと思うんだが。

226 名前:デフォルトの名無しさん [2020/09/12(土) 08:12:41.83 ID:cGm6fMBf0.net]
動的配列に値を追加していきたいのですが要素番号を0ではなく1から始める方法はありませんか?

227 名前:デフォルトの名無しさん mailto:sage [2020/09/12(土) 08:24:59.90 ID:OyGZa+nz0.net]
Sub testtttt()
Dim arr() As Variant

ReDim arr(1 To 1)
arr(1) = 10
ReDim Preserve arr(1 To 2)
arr(2) = 20
ReDim Preserve arr(1 To 3)
arr(3) = 30

MsgBox arr(1) & " " & arr(2) & " " & arr(3)
End Sub

ちょっとはぐぐれよな
https://www.relief.jp/docs/excel-vba-shift-array-index-to-1-start.html

228 名前:デフォルトの名無しさん mailto:sage [2020/09/12(土) 08:28:00.30 ID:FkIM4E0+M.net]
『[ VBA ]「Option Base 1」使うなよな!反論は聞かない!』

229 名前:デフォルトの名無しさん mailto:sage [2020/09/12(土) 15:06:14.92 ID:X8G1U5XY0.net]
アレイリスト使うほうがかんたんじゃね?

230 名前:デフォルトの名無しさん mailto:sage [2020/09/12(土) 20:26:44.99 ID:+6u/uPRn0.net]
先頭を1にするのはセンスないね

231 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 18:06:26.03 ID:YLQY1Qz5r.net]
i++とか+=使えないのマジで不便だな
前置インクリメントもできないし一行でもend ifとかloop書かなきゃいかんしめんどくさくね?
この言語もうちょい進化しないの?



232 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 18:10:50.73 ID:CnoY9xmOM.net]
1行でEnd If書きたくないならThenの後に半角スペースいれたら改行しないで処理書いてみ

++とかは禿同

233 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 18:13:56.53 ID:YLQY1Qz5r.net]
>>232
おおこんなことが、、、
ありがとう!

234 名前:デフォルトの名無しさん [2020/09/14(月) 18:15:50.60 ID:LbAMjRkX0.net]
>>231
馬鹿は死ねよ

235 名前:デフォルトの名無しさん [2020/09/14(月) 19:51:50.83 ID:ZpzZ2vr50.net]
ガイジ君ブチ切れw

236 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 19:57:09.34 ID:lPVfhwtb0.net]
ざわ・・ざわ・・

237 名前:デフォルトの名無しさん [2020/09/14(月) 20:46:20.36 ID:LbAMjRkX0.net]
+=使えるだろうが

238 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 20:54:32.80 ID:P2Bbq2Qk0.net]
使えません

239 名前:デフォルトの名無しさん [2020/09/14(月) 20:56:59.34 ID:LbAMjRkX0.net]
あー、VB.Netスレだと思ってた。スマン、死んでくる。

240 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 21:01:00.11 ID:P2Bbq2Qk0.net]
逝かないで

241 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 21:01:06.64 ID:K/D9SivKp.net]
制御構造は、キーワードの選び方がやや独特だけど、基本的なものについては、概ね他の言語と同等のことはできると思う。
どちらかというと、変数の宣言・定義が一緒にできないとか、配列・コレクションの要素参照が角括弧でなく丸括弧だとか、プロシージャ呼び出しの丸括弧の要否とかの方が不便さを感じるかな。まぁ、これらも慣れと言われればそれまでだが。



242 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 22:06:22.62 ID:9LhT2bwK0.net]
gotoとラベルでできるっちゃあできるけどcontinueとbreakが欲しい

243 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 22:20:37.59 ID:8aASiVNY0.net]
breakは、一応Exit 〜が概ね対応しているのでは(While〜Wendでは使えないけど)?
脱出するループを明示的に指定するので、breakより便利な場合もごくたまにある。もっとも、二重のForループから抜ける場合などは結局GoToに頼ることになるので中途半端ではあるけど。

244 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 23:27:12.72 ID:EMg7ooaX0.net]
俺もたまにラベルでcontinueするけどめちゃくちゃ見栄え悪くて嫌

245 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 08:35:58.25 ID:Ny+/GOwEd.net]
>>232
>>233
基本、それは使わないな。
読みやすさとか構造の分かり易さ優先。
勿論、時と場合による。

246 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 09:16:48.30 ID:Ty4jOAMY0.net]
ユーザーフォームの2つリストボックスで選択された値を変数に代入する方法を教えてください

■Module1
Public str As String

■ThisWorkbook
Sub tes1()

UserForm1.Show vbModeless
Range("A1").Value = str
End Sub

Sub tes2()
Range("A2").Value = str
End Sub

247 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 09:17:03.49 ID:Ty4jOAMY0.net]
■UserForm1
Private Sub UserForm_Initialize()
Dim r As Long
For r = Year(Date) - 1 To Year(Date) + 2
UserForm1.ListBox1.AddItem r & "年"
Next r
For r = 1 To 12
UserForm1.ListBox2.AddItem r & "月"
Next r
UserForm1.Show vbModeless
End Sub

Private Sub OKbtn_Click()
str = Replace(UserForm1.ListBox1.Text, "年", "") & "_" & Replace(UserForm1.ListBox2.Text, "月", "")
Unload UserForm1
End Sub

テストで変数strをA1・A2に入れたいのですが、この方法だとどちらも入りません。

248 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 09:33:07.65 ID:q5KWnXWXM.net]
ボタン押してstrに代入するところModule1.strじゃないとダメなんじゃないの

249 名前:246 mailto:sage [2020/09/15(火) 09:45:50.10 ID:Ty4jOAMY0.net]
>>248
試しましたがだめでした

追記
ブックを開いたまま、tes1を2回目に実行するとA1には書き込みますが、
ブックを開いて、1回目のtes1実行ではA1には書き込まれないようです。

250 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 09:57:04.92 ID:q5KWnXWXM.net]
モードレスだから
ボタン押した時にUnload UserForm1する前にModule1.tes2を呼び出さないとだ

Sub tes1()
UserForm1.Show vbModeless
End Sub

Sub tes2()
Range("A1").Value = str
Range("A2").Value = str
End Sub

251 名前:246 mailto:sage [2020/09/15(火) 11:27:58.65 ID:Ty4jOAMY0.net]
>>250
ありがとうございました。解決しました



252 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 18:56:31.81 ID:Nzz3069/0.net]
AccessVBAを使用しているのですが、標準モジュールを変数に格納する方法がわかりません。
フォームコントロールの様に変数に入れて扱う方法はありませんでしょうか。

253 名前:デフォルトの名無しさん [2020/09/15(火) 19:29:57.34 ID:pZ4d9dfu0.net]
ありません

254 名前:デフォルトの名無しさん [2020/09/16(水) 00:02:05.57 ID:chmz5kZM0.net]
Sub test()
MsgBox Me.TextBox1.Value
Me.Name="a"
Me.Name="Sheet1"
End Sub

1回目の実行 OK
2回目の実行 MsgBoxでエラー
3回目の実行 OK
4回目の実行 MsgBoxでエラー

なんでやねん!

255 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 01:13:07.34 ID:fUx+IXsk0.net]
>>254
F8 でステップ実行してみ、あとエラーの内容くらい書いてもよくね?

256 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 10:04:16.38 ID:HoY0/Pv80.net]
>>253
ありがとうございます。
フォームを格納できるなら標準モジュールも出来るのかと思って質問しました。
標準モジュール内に書かれた関数の引数として参照先の標準モジュールを渡したかったのですが、別の方法を考えてみます。

257 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 18:43:38.23 ID:DJD3HHCL0.net]
動画ファイル(拡張子 mp4,avi等々)の長さ(時間)をvbaで得ること出来ませんかね。
動画用のプログラムでは出ているから何らか手段はあると思うのだけど。

258 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 19:23:25.54 ID:u7LyhgECM.net]
>>257
できる
はい、次

259 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 19:55:21.82 ID:KOE6L/fW0.net]
>>257
拾い物、動くかどうかは知らん

Sub ボタン1_Click()
Dim Shell, Folder
Set Shell = CreateObject("Shell.Application")
Set Folder = Shell.Namespace(Range("A1").Value)
Fil = Dir(Range("a1").Value & "\*.*")
Rows("5:65536").ClearComments
i = 5
Do While Fil <> ""
For j = 0 To 40
Cells(i, j + 1).Value = Folder.GetDetailsOf(Folder.ParseName(Fil), j)
Next
i = i + 1
Fil = Dir()
Loop
Set Folder = Nothing
Set Shell = Nothing
End Sub

260 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 20:18:38.96 ID:pG4LN1Ne0.net]
手を抜くんじゃない!
まじめにヘッダー読み込んで解析しろよ

261 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 20:21:47.41 ID:0zA9ovKo0.net]
ファイルのプロパティからは取れない場合もあるよ



262 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 21:31:45.86 ID:chmz5kZM0.net]
>>255
今環境ないんだけど、
アプリケーションの定義何とかか、
インデックス何とかか、
オートメーション何とかのどれか。
何か変なものがSetされちゃってるのかと思ったけど、
MeじゃMeしかないよね?

263 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 22:10:00.45 ID:jvSIB85Td.net]
>>260
昔、解析したことがある。
aviとかは割と簡単だね。

264 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 23:12:03.30 ID:dsrVDQ5Z0.net]
すごく初歩的な質問ですみません

&演算子で文字列と数字をつないで文字列を作った時に
出来上がった文字列に""を付けなくていいのはなぜなのですか?

MsgBox "あいうえお" は""を付ける必要がある
MsgBox "A" & hoge は文字列扱いのはずなのに""を付けて MsgBox ""A" & hoge"のようにしなくていいのが解せません

265 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 23:23:17.92 ID:0zA9ovKo0.net]
&とhogeは文字列ではなく演算子と変数

266 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 23:24:34.57 ID:0zA9ovKo0.net]
""で囲ったら演算子でも変数でもないただの& hogeという文字列にしかならない

267 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 23:48:53.36 ID:dsrVDQ5Z0.net]
ありがとうございます

>""で囲ったら演算子でも変数でもないただの& hogeという文字列にしかならない
なるほど確かにです

では、&演算子でつなぐと文字列扱いになるという認識が間違っているのでしょうか?
それとも文字列扱いにはなるけど上記の理由から外すことになっているという感じでしょうか?

268 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 00:09:43.18 ID:pIQJoJyT0.net]
>>267
その場合、
hogeは文字列として認識してください
という命令を出している
つまり
文字列(”A”) と(&) 文字列(hogeという変数に入っている文字列) を繋ぎ合わせて表示してください
というのが”A” & hoge

269 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 00:09:48.11 ID:MJVBSNKC0.net]
ダブルクォートには引数の囲むような意味はない
引数を囲む記号は丸括弧になる
たとえば X = msgbox("a" & hoge) みたいな書き方になる
返り値をとらない場合は()が省略可能ってだけ

270 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 00:11:18.08 ID:D84tTl8o0.net]
リテラルと変数について調べると理解できるかも

271 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 00:13:09.47 ID:ncMNPksn0.net]
>>267
hoteの型は何なんだ



272 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 00:21:16.12 ID:0EHVBisp0.net]
値に型ってのがあるのを理解しよう
表示したいのは、"A"という値と変数hogeの値(を連結したもの)だろ

&演算子でつなぐと文字列扱いになるってのは、演算対象を文字列に変換して結合するってこと
この場合、hogeの値が文字列以外でも文字列に変換して評価するってことだ

基本を理解したいなら、なんの説明もなく&でつなぐと文字列扱いとかいう教え方するところは避けたほうが良いかな
とりあえず動けばいいってならまあすきにすればいいけど

273 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 02:20:25.53 ID:c2bYLY/G0.net]
MsgBoxの第1引数は文字列型の値である必要があり、文字列型の値を表す式として典型的なのは、@文字列リテラルか、A文字列型の値が格納されている変数(文字列型変数)の参照。二重引用符は、文字列リテラルの表記方法に過ぎない。
&演算子は、本来、2つの文字列型の値を被演算数とする演算子だが、被演算数が文字列型の値と数値型の値であるような場合等は、適宜数値の方を文字列型の値に自動変換した上で本来の演算を行う……ということかと。重複になるが。

274 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 04:55:16.59 ID:PzgKRL2g0.net]
数値を文字に変換するなら CSTR がある

275 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 07:47:55.65 ID:iixTl117d.net]
>>267
法則を暗記するからそうなる。
法則の仕組みを覚えるんだ。

276 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 11:44:40.11 ID:1/N+zsdG0.net]
同じフォルダにある"〇〇"というCSVを開いて、そのシートの最終行を取得したいのですが
「インデックスが有効範囲にありません」というメッセージでとまります

Sub salegrp()
Workbooks.Open ThisWorkbook.Path & "\〇〇", ReadOnly:=False
MsgBox Sheets("〇〇").Cells(Rows.Count, 1).End(xlUp).Row
End Sub

他のブックの最終行を表示する方法を教えてください
(A列には最終行まで値が入っています)

277 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 11:54:47.91 ID:DZPRMbPmM.net]
csv開いたてからActiveWork ook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Rowすれば

278 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 12:14:37.64 ID:qGYgSA/Y0.net]
>>276
必要なのは最終行に入ってるデータの内容?行数を知りたいだけ?
全データをワークシートに入れる必要がなければテキストファイルとして開いた方が早いかも

279 名前:デフォルトの名無しさん [2020/09/17(木) 12:24:52.75 ID:D1QZID39M.net]
Workbooks.Openの返り値をとってそれを操作する

なおRows.Countも省略せずにシート指定する

280 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 13:03:15.94 ID:1/N+zsdG0.net]
>>277
できました。

281 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 16:10:59.23 ID:mN4YvgPv0.net]
>>267
Sub tessstttt()
Dim str1 As String
Dim str2 As String

str1 = "あいうえお"
str2 = "かきくけこ"

MsgBox str1 & str2 '結果「あいうえおかきくけこ」

MsgBox str1 & "かきくけこ" '結果「あいうえおかきくけこ」

MsgBox "あいうえお" & "かきくけこ" '結果「あいうえおかきくけこ」
End Sub



282 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 16:17:02.54 ID:mN4YvgPv0.net]
>>279

VBA続けるつもりならこっちでやれるようにした方が

283 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 16:44:05.17 ID:T9Rqn+gv0.net]
他のbookやsheet絡むととたんに冗長になるんだよなぁ
Range(.Cell(a,b))とか .Cellの前にもブックやシート指定しないとならんし

284 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 17:02:14.36 ID:pIQJoJyT0.net]
>>283
むしろ1シートだけしか使わない場合でも、実効中に人がシート変更とかしても大丈夫なようにブック明記した方がいい

285 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 17:07:16.63 ID:N0wmq1hya.net]
ブックとシート明示してworksheetオブジェクトの変数作ってそれ経由でアクセスさせるのが鉄板かね〜

286 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 17:41:26.80 ID:dgD4TP5z0.net]
csvの最終行だったらテキスト形式でEOFまで吸い上げてってやった方が動作時間的には良さそうな気がした

287 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 18:04:52.95 ID:aPn4iHhdM.net]
CSVの読み込みをしっかりやるならPowerQuery使おうみたいな話もあったりなかったり

288 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 18:51:11.07 ID:1zO/WKqm0.net]
>>285
てか、基本でしょ

289 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 18:59:48.75 ID:DNVG/ozSa.net]
>>288
鉄板と基本の違い教えて

290 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 19:13:46.34 ID:ncMNPksn0.net]
シート明示してないコードほんと多い
よくやるわ

291 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 19:55:58.19 ID:iixTl117d.net]
>>279
俺なんて、必ずBookから書くぜ。
WithとSetを多用することになるが。



292 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 19:56:59.36 ID:iixTl117d.net]
>>283
その例ならRangeの前にも"."が必要。

293 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 19:58:31.27 ID:iixTl117d.net]
>>286
うん、CSVはLine Inputで1行ずつ+Splitで分解にすることが多い。

294 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 20:23:48.98 ID:dgD4TP5z0.net]
VBA覚えたての頃はいちいちアクティブシート切り替えてシート指定省いてたけど
Sheet1.Cells(a,b)って書く癖は絶対つけといた方が良いって今は思ってる
可読性が段違いだもん
暫く同じシートのセルをいじくりたおすならWithで目立つように囲ってやりゃあ良いし

295 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 20:32:12.03 ID:0EHVBisp0.net]
>>286
項目中に改行含むcsvとかも存在するからなぁ
汎用的なcsvを真面目にパースするとかなり面倒
そしてEXCELは最強のCSVパーサ(笑)

296 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 20:38:51.87 ID:23KXp+DW0.net]
なんつーレベルの高い話だよ
初心者が覚えようと思ってどんなもんかとスレを見たのが大間違いか

297 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 21:39:36.45 ID:ncMNPksn0.net]
この先いつまで初心者を名乗るつもりか知らないがいちいちアピールしない方がいいよ

298 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 21:45:39.26 ID:DqUtQRPA0.net]
>>294
可読性以前に怖いんだよな。
アクティブシートが切り替わっちゃったらどうしようって。
実行中の操作とかで。
DoEvents挟まなきゃ絶対切り替わらないってならいいんだけど。

299 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 22:36:46.26 ID:qGYgSA/Y0.net]
可読性も考慮するならオブジェクト変数に入れたりWithで囲んだり、頻出する構文なら別Functionに飛ばすという手もある
めんどくさいけどバグを出すよりはマシ

300 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 01:50:57.23 ID:V3SekzLi0.net]
そもそもオブジェクト指定のないCellsがいつでもActiveSheetを参照すると思うなよ

シートモジュールに書いたCellsはそのシートを参照するんだぜ

301 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 10:32:05.02 ID:68qBgcmgH.net]
VBAというよりVBSかもしれませんが
いろいろ試したのですが正規表現の(肯|否)定(先|後)読みに対応していないようなのですが認識に相違ありませんか?
また、擬似的に(肯|否)定(先|後)読みに対応させたコードを誰か公開していませんか?



302 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 14:09:52.14 ID:1dkG1MHP0.net]
>>301
多くのアプリで、正規表現はWindowsに標準で内蔵されてるDLLを使ってる
独自の仕様やバグがあるのは既知だから、それが気に入らない時は別のライブラリを見つけてくるしかない

303 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 17:55:04.61 ID:vGT+RG4a0.net]
VBSはスレ違いになるんだろうけどさー
今、仕事でそれで書かれたコード見てるんだよねー
VB.NetからVBAに戻るとそのインテリセンスの効かなさに辟易するけど
VBSで書かれたものはその比じゃないねー

参照もなーんも効かないところに持ってきて
インデントも正しく書いてないし
綺麗にスパゲティーコードになってるの見ると
殺意を覚えるわー

まぁVBS自体は同じファイルの中に
複数のクラスが書けたりするところは
VBAよりいいのかな?

304 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 20:53:29.32 ID:Ej6zlwK4a.net]
見てるだけで殺意はないだろ
自分で分かりやすく直していけばいい

305 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 20:57:08.45 ID:E6dIN4Hja.net]
どんな人が書いたコードでも理解できるのがプロ

306 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 20:57:17.16 ID:nL5nIenz0.net]
C列に"2007/3/26"などのような書式で年月日が入っていますが
それをC=年、D列=月、E列=日にしたいのですが

↓だと年が1905,月が1、日が26日のように変換されてしまいます。

Dim r As Long, dt As date
For r = 2 To 435
dt = CDate(cells(r,3))
Cells(r, 3) = Year(dt)
Cells(r, 4) = Month(dt)
Cells(r, 5) = Day(dt)
Next r

307 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 21:01:25.47 ID:vGT+RG4a0.net]
>>306
最初date型で取ってやれば確か年や月や日を取る関数が有ったと思うよー
じゃあねー

308 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 21:05:10.29 ID:3fDNLBctH.net]
>>302
私が気に入りそうなものはありますか?
肯定先読み肯定後読み以上に高度な機能は求めていないのですが

309 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 21:10:13.79 ID:vGT+RG4a0.net]
ていうかそうしてんじゃん
出力先のセルの書式はどうなってるの?
コードを見た感じじゃ少なくとも3列目は
日付型みたいだけど

310 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 21:14:07.50 ID:Kp8J/oyZ0.net]
>>306
year、month、dayの引数のdtの中身は2007/3/26ではない

311 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 21:16:37.69 ID:Kp8J/oyZ0.net]
または3、4、5列目の表示形式をそれぞれy、m、dにしてる



312 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 21:29:41.49 ID:LhaPjq300.net]
>>306
考えなしに書くからセンス皆無なコードだけど3列目の日付が文字列で入ってるならこんなんどうよ

Dim Ary(2 to 435,1 to 3) As Long,r As Long, a As String
For LBound(Ary,1) to UBound(Ary,1)
a = Sheet1.Cells(r,3).Value
Ary(r,0) = Split(a,“/“)(0)
Ary(r,1) = Split(a,“/“)(1)
Ary(r,2) = Split(a,“/“)(2)
Next

Range(Sheet1.Cells(2,3),Sheet1.Сells(435,5)) = Ary

313 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 22:40:09.47 ID:1dkG1MHP0.net]
>>306
Sub Macro1()
  Range("C2:C435").Copy
  Range("D2:E435").Select
  ActiveSheet.Paste
  Range("C2:C435").NumberFormatLocal = "yyyy"
  Range("D2:D435").NumberFormatLocal = "m"
  Range("E2:E435").NumberFormatLocal = "d"
End Sub

314 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 22:48:07.19 ID:mNDgEDOXa.net]
>>313
くそこーどを貼るのはやめてあげて

315 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 23:02:36.64 ID:V3SekzLi0.net]
>>306
セルに表示されている文字とセルの値は別だって理解が必要

おそらく
C列の表示形式が日付になっているが、そこの値を数値の2007にした
数値の2007は日付にすると1905/6/29 その年だけが表示されている
同様に数値の3は1900/1/3、数値の26は1900/1/26

まあ、想定とは違うかもしれんが正しく動いてると思われるな
解決策は、表示したいのは数値なのか日付なのかちゃんと決めて然るべき値と書式を設定しろ

316 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 23:05:29.99 ID:V3SekzLi0.net]
つヵ、C列の値でC列に書き換えるとかしないで
元の値を別の列にもっとけば、VBAなしで関数だけで出来るだろうけど

317 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 04:14:23.53 ID:JSd39pzr0.net]
C,D,E列に表示させたいのは「数値」であるにも関わらず
「日付」の表示形式になっているからおかしくなる

C,D,E列の書式設定→表示形式を日付から標準にする
こうするとC列は39167のような形で表示されることになるが
お構いなしにマクロを動かせば、意図した通りの動きになる

でどう?

318 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 07:38:40.10 ID:kGiNzl5D0.net]
>>305
理解出来るからこそ腹立たしいこともあるよー
例えばaとbとcってBooleanの変数を定義して
a = b = c とか書いてるやつ

まぁbとc が同じならaにTrueが、
違えばFalseが入るってことを期待して
書いてるなら見づらいけどまだ許せるよ
でもcにbが代入されてそのままaにbが
代入されるとか思って書いてたらしく
システムバグらせてそのままにしてたりとか
テストどうしてたんだとか思うよねー

正直こんなのに関わりたくないけど
仕事だからやるって感じだねー

319 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 07:43:05.72 ID:kGiNzl5D0.net]
あ、逆だった
bにcが代入されてaにbが代入されると
思ってたらしいってことね

まぁこの4日間は連休だし
そうじゃなくてもテレワークだから
気楽に適当にやるつもりだよー

320 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 07:51:21.74 ID:oBjg4zik0.net]
仕事の内容でそのソースを直せってことなら書き直せばいいんじゃねーの
そのまま残すと後任者に同じように思われるんだぜ

321 名前:257 mailto:sage [2020/09/19(土) 10:25:54.04 ID:fwfEHGdP0.net]
>>259
遅くなってしまいましてごめん。自分の欲しかった情報がこれで取れる
事ができました。

ありがと!



322 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 15:00:02.54 ID:TN+kKyJDd.net]
>>320
その判断は結構難しい。
今動いてるものは、そのままにしておくというのが通常だ。

Accessでレコードセットループで回してる最中にその値でもって別のレコードセット開いたりを7、8回やって10分かけてデータ作ってるプログラムが有るんだけど、コレ、クエリ1つで出来るんじゃね?と思って試しに作ったら一瞬で出来る。

それでも、正式に変更することになるかと言えばならない。
こっちだってその辺は分かってる。
何かの時に、きちんと作り直しましょうという話になるまで置いとくもんで、むしろそんな話にならずにずっ―とそのままというのが殆ど。

323 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 15:56:27.98 ID:nGfYM+wGM.net]
>>322
なら
> でもcにbが代入されてそのままaにbが
> 代入されるとか思って書いてたらしく
> システムバグらせてそのままにしてたりとか
> テストどうしてたんだとか思うよねー
とか書くなよ
どうせ盛々で語ってるだけだろw






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<123KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef