Excel VBA 質問スレ Part72

■ このスレッドは過去ログ倉庫に格納されています
2021/07/18(日) 08:42:15.37ID:KskL7bEXd
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part70
https://mevius.5ch.net/test/read.cgi/tech/1616072923/
Excel VBA 質問スレ Part71
https://mevius.5ch.net/test/read.cgi/tech/1621914481/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/08/08(日) 16:31:53.22ID:N9yN2q6hM
失礼
VBAなんて所詮操作の自動化なんで、慣れたらパズルというより手順書書くようなもんだ
どっちかというとワークシート関数を使いこなすほうがパズル
2021/08/08(日) 23:30:31.22ID:jh5zCN5Z0
ActiveWorkbookが入っているフォルダの名前の先頭に
ActiveWorkbookのSheets(1).Range("A2").Valueを付けたいです。
しかしフォルダ名の取得に失敗しています。
ActiveWorkbook.Path(フルパス)を\で区切った最後の文字列だと思いますが
もっと手短に取得する方法があったら教えてください。
2021/08/09(月) 00:14:13.54ID:9VfepREK0
名前分解=split(名前,"\")(ubound(split(名前,"\"))
2021/08/09(月) 00:43:14.90ID:9VfepREK0
あっカッコが足りない
2021/08/09(月) 17:35:43.32ID:gGnrAdRU0
ださっ
2021/08/10(火) 18:56:58.22ID:9fiWluCI0
FileSystemObject使えばいいんじゃね?
ファイルそのものを操作しないならちょっと面倒に感じるかもだけど
2021/08/10(火) 21:44:06.51ID:dMuyff760
やや冗長だけど、fsoは使って損は無いと思う。¥とsplitは頭が疲れる

Sub foo()

Set fso = CreateObject("Scripting.FileSystemObject")
Set mybook = fso.getfile(ThisWorkbook.FullName)

Set mybook_parent = mybook.parentfolder
Header = ActiveWorkbook.Sheets(1).Range("A2").Value
Debug.Print Header & mybook_parent.Name

End Sub
2021/08/10(火) 23:53:30.63ID:Xm+HKu32M
splitが楽だと思うが、、、
2021/08/10(火) 23:57:50.14ID:plMJ/ypm0
>>404
締切のある「数独」
2021/08/11(水) 02:05:15.42ID:yV4dFjvN0
>>413
ubound(split は禁じ手って言われてる
2021/08/11(水) 02:19:37.21ID:T0yXhT3EM
>>420
なんで?
同じ処理を2回やってるから配列変数に入れたくなるけど、禁止するほどの理由でもないし
2021/08/11(水) 04:35:09.41ID:KlHs/LBx0
InstrRevじゃだめなん?
2021/08/11(水) 05:55:28.37ID:LQvUe8o6H
文字列として取得したいだけならまだしも、フォルダ名変えたいんでしょ?
普通にFileSystemObject使った方がいいよ
2021/08/11(水) 12:03:15.14ID:pcBI0cgA0
なんにしても、開いてるエクセルのあるフォルダの名前とか変えれんと思うのだがのう
2021/08/11(水) 12:29:18.95ID:oEEdpHhhM
フォルダ作って、開いてないファイルは移動して、開いてるファイルは新しいフォルダーに名前を付けて保存ってして、
最後に要らんフォルダとファイルを消せばリネームしたように見える(見えるだけ)
2021/08/11(水) 12:30:50.00ID:N26Fs5+x0
20180811_フォルダ名
みたいにバックアップつくル目的かと思ってた
2021/08/11(水) 13:00:28.54ID:pcBI0cgA0
リネームすらできないのに、どうやって自分自身を含むフォルダを削除できるんだ?
428デフォルトの名無しさん (ラクッペペ MM8b-OMgf)
垢版 |
2021/08/11(水) 13:04:20.40ID:dnSnLDjMM
名前をつけて保存
2021/08/11(水) 13:08:03.81ID:jh4/giPJM
非同期でスクリプトを実行してから
自分を閉じる
スクリプトの動作は一定時間スリープしてからフォルダごと削除
で、できる?
2021/08/11(水) 13:19:34.76ID:pcBI0cgA0
基本的にはそれでできるだろうけど、
権限の問題とか、ファイルがルートに置かれてたりしたときとか、考慮点はいっぱいある
2021/08/11(水) 13:24:26.65ID:4Gud1KwJa
自分が書いたコードを公開すればいいのに、みなさんよくこの質問を答える気になるね
2021/08/11(水) 15:19:39.84ID:BgXnPp0P0
そう思うなら自分が書いたコードを公開すればいいのに
2021/08/11(水) 16:01:47.79ID:wST2jK7f0
的外れ
434デフォルトの名無しさん (ラクッペペ MM8b-OMgf)
垢版 |
2021/08/11(水) 18:18:12.44ID:6659knn7M
答える方もテキトーだから気にするな
435デフォルトの名無しさん (アウアウウー Sa55-zfXN)
垢版 |
2021/08/11(水) 22:13:22.02ID:0mcLwEZRa
的を得る?的を射る?
2021/08/11(水) 22:20:07.30ID:N26Fs5+x0
今は両方正解とも言われてるな
437デフォルトの名無しさん (ワッチョイ 0101-NW/4)
垢版 |
2021/08/11(水) 23:18:26.09ID:/u/X/l7G0
射的場では、景品が的です。
射貫けば、ば的が得られるのです。
というムチャクチャな言い訳で、得るもOKになったらしいですぞ。
2021/08/11(水) 23:51:27.40ID:MV8X3c1h0
教養ないやつのせいで誤用が標準化されるのか
2021/08/11(水) 23:57:08.62ID:N26Fs5+x0
「新しい:あたらしい」
も、
元々は「あらたしい」が正しい
今更これに対して教養がどうとか思わんでしょ。そのうち慣れる
2021/08/12(木) 00:28:12.75ID:AcVN/mcWM
「全然」の用法は一周して元に戻ったけどな
441デフォルトの名無しさん (ワッチョイ 0101-NW/4)
垢版 |
2021/08/12(木) 00:36:07.89ID:2S4isd+w0
>>439
新しいは、英語の不定冠詞が母音の前で変化するのと同じで、単純に言いにくいからですよ。
当然の成り行きなんです。
翻って的を得るは、小賢しい屁理屈じゃないですか。
2021/08/12(木) 00:44:37.62ID:BTMS1DN70
>>441
さすがにあの言い訳は後付だろう
みんなが間違えてるけど意味が通じるからok
2021/08/12(木) 00:46:04.06ID:XfbSLdwiM
いや、それも
「をいる」
より
「をえる」
のほうが言いやすいからと解釈できますよ
「い」は口を横に広げないといけないかど
「え」ならそれほど広げる必要もなくその後の「る」にも移行しやすいからね
2021/08/12(木) 01:26:40.50ID:YbO1i5Cqd
「こんにちは」と書いて「こんにちわ」と発音するのも、knifeをナイフと読むのも、言いやすいように変化しただけ
言葉ってのはそういうもん
2021/08/12(木) 01:30:00.55ID:jC6xQX8qd
>>438
世界中の言語、習慣、伝統や文化のほとんどは、教養のないやつが作り上げた物なんだぜ
2021/08/12(木) 02:58:07.28ID:aOGRiEATH
的もらえたとして、もらうやついるの?
2021/08/12(木) 07:17:08.83ID:BTMS1DN70
>>446
縁日の射的
2021/08/12(木) 08:25:03.59ID:F2ZBInFgM
じゃあknifeは昔
クゥナイフとか言われてたのか
2021/08/12(木) 09:03:50.69ID:KOJd5FjgH
>>448
そうだよ
発音しない子音は口を動かすのが面倒で言わなくなっただけで、間違いがどんどん定着してった
2021/08/12(木) 09:08:47.23ID:6jf0e9cQd
「延々と」を「永遠と」と書いたり言ったりする間違いが増えてて気になる
2021/08/12(木) 10:25:30.66ID:8wOIyJEba
スレと全く関係ない話で
2021/08/12(木) 10:31:28.13ID:JfgsXMu40
fightとかどう読んでたんだよ
ファイグフトかよ

ハードルが敷居に変わりつつある
フンイキがフインキに変わりつつある
2021/08/12(木) 11:06:43.36ID:BTMS1DN70
>>452
そのとおり。昔は全て表記通りの発音だった。
欧米圏内は色々な言語が複雑に混じり合った経緯があるので、「なんで?」と考えるとキリないぞ

更に言うとネットやテレビが台頭してからは言語は固定されるだろう、と学者は予想していたけどあんまりそうでもないようだ
2021/08/12(木) 11:29:35.78ID:cpovNsRqd
ネットで声の大きいバカが目立てるようになったおかげで、間違いの広がる速度がむしろ加速してる
ウィルスやワクチンの誤解もひどいもんだし
2021/08/12(木) 11:32:55.00ID:stPdQEKya
あの…VBA…
2021/08/12(木) 11:37:28.29ID:3EGHE4wmM
言葉の変化を認めないやつはRight関数も500年前の発音でアルァイギーエッテー関数と読めよ
2021/08/12(木) 11:39:34.06ID:KOJd5FjgH
次の質問どうぞ
2021/08/12(木) 12:31:29.35ID:uGYsB1RKM
ファンクション(Function)

ファンスウ

ハンスウ(函数)

カンスウ(関数)
2021/08/12(木) 14:58:41.40ID:wFbxLk6vH
万葉仮名も太古の昔はそのまま読んでたらしいしな
2021/08/12(木) 15:14:57.51ID:4wn9NucC0
ナイフはそのうち
「ナイ」になるのかな
2021/08/12(木) 15:16:18.65ID:JfgsXMu40
サイフはサイか
日本語やんけー
2021/08/12(木) 15:21:53.11ID:BTMS1DN70
>>454
ネットは大分マシ。すぐにそれは変ですよって指摘できるからな
昔は大名が変な言い間違いをしていたらそれが臣下に広まって、地域一体のおかしな方言になった
ワクチンの誤情報もネットがなかったらもっとひどいことになっていただろう
2021/08/12(木) 17:42:00.13ID:Fj2kkZVUa
ひとのコードにケチをつけるつもりはまったくないけど
上にあった「名前分解=split(名前,"\")(ubound(split(名前,"\"))」ってのを実際に書きたい場合
自分は他人が見る見ないにかかわらず「a = split(名前,"\")」と「名前分解=a(ubound(a))」の
2行に分けるような感じで書いてるけど1行にする人がおおいのかね?
2021/08/12(木) 17:53:53.44ID:XQI2fayvM
そっちのほうがいいね
2021/08/12(木) 18:01:08.04ID:tY2of2ova
1ヵ月後の自分は他人なので…
丁寧に書けるなら絶対その方がいい
2021/08/12(木) 18:29:35.92ID:FVU2afn4d
前スレ848です
最後の報告です
スレ汚しすいませんでした

その後
マクロ廃止後業務量が増えまくってあほがヒステリーを起こし
スラックで延々とケンカを売られ続けた
あまりにもブーメランを投げてくるので華麗に避けてたらあほ激怒
仕事を辞めると言い出した

課長はその言葉お嬉々として受け止めていた

結局のところ仕事が終わらず、マクロを使うことになったよ

あほが辞めるのは嬉しいけど、本当に自分が正しいのかよくわからなくなり
ちょっと鬱気味になっている

結論はマクロお人に共有すべきじゃなかったと思う
2021/08/12(木) 18:58:40.91ID:Fj2kkZVUa
>>466
もうvbaと関係ないからこなくていいよ
そんなにリアルでかまってもらえないの?w
2021/08/12(木) 19:09:35.66ID:JfgsXMu40
>>466
本当にお疲れ様
むしろそのあほを辞めるように持って行った功労者w

>>467
上の流れには突っ込まずそれかw
2021/08/12(木) 19:30:26.41ID:J6mXolxSM
>>466
お疲れ様
あんまり気にしすぎるなよ?
もっと肩の力抜いてこうぜ
470デフォルトの名無しさん (ワッチョイ 618e-effB)
垢版 |
2021/08/12(木) 19:36:16.05ID:Gdq8XFU10
>>466
死ねよ
2021/08/12(木) 19:43:55.65ID:Fj2kkZVUa
>>468
>>451は自分ですよ
2021/08/12(木) 23:17:39.27ID:BTMS1DN70
>>466
いつもの流れだから気にすんな
473デフォルトの名無しさん (ワッチョイ 6eda-oCel)
垢版 |
2021/08/13(金) 02:15:07.67ID:fQVKfGt/0
>>466
まだ終わってない
474デフォルトの名無しさん (ワンミングク MM92-4yzW)
垢版 |
2021/08/13(金) 03:37:00.81ID:NVit/nDVM
>>466
こういう人ってたかがマクロを少し作れるだけで自分が会社を経営してると思い込む馬鹿ばっかだよ
2021/08/13(金) 09:23:59.80ID:Dh6ZDsQC0
すみません
VBA初心者です
下記プログラムはB1とB2に任意の数値を入れると
A5〜A100に数値から数値の間の数字が打ちあがります
一度入力したら2回目はA5からA100の数値を手動で削除
しなければなりません
B1に数値を新たに入力したら自動でクリアされれば
手動で削除しなくていいのですがコードが書けないで困ってます
どなたか詳しい方いましたらご教授ください

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address <> "$B$2" Then Exit Sub
If Range("B1").Value = "" Then

Exit Sub
End If
Range("A5:A100").Clear
Dim cnt As Long
Dim i As Long, j As Long
j = 0
cnt = Target.Value - Target.Offset(-1).Value
For i = 5 To cnt + 5
Cells(i, 1) = Target.Offset(-1).Value + j
Cells(i, 1).NumberFormatLocal = "@"
j = j + 1
Next i
End Sub
2021/08/13(金) 09:29:56.69ID:7J82GjQPM
>>474
噂の同僚もこんなこと言ってそうだな
477デフォルトの名無しさん (ワッチョイ 9901-ic7f)
垢版 |
2021/08/13(金) 09:40:28.79ID:IVydqk9y0
VBAで数値計算をやらないといけないから、VBAの仕様を一通り学ぼうと思って書籍で勉強しているんだけど、
VBAで数値計算する意味がわからんわ

VBAで数値計算するメリットってファイルの入出力くらいしかないだろ・・・
2021/08/13(金) 09:57:08.98ID:lG5axGIx0
>>474
という思い込みを>>474がしてるってネタでしょ?w
2021/08/13(金) 10:08:41.85ID:7J82GjQPM
>>477
逆に少し複雑になったら
並べ替えやvlookup用に変な数字が所狭しと並んだり
式もシートもぐちゃぐちゃになったり
行を増やすごとに式をいちいちコピペしないといけなかったり式のコピペ漏れの危険もある関数でやるメリットのほうがよくわからん
関数使っても問題ないのはマジで足し算掛け算レベルの簡単なものだけだろ
2021/08/13(金) 10:09:11.78ID:zvWaH7NU0
>>475
b1かb2以外で終了、に変更
Excel入ってないPCだから試してないけど、多分動くと思う

If Target.Address <> "$B$2" Then Exit Sub

If not(Target.Address = "$B$2" or Target.Address = "$B$1") Then Exit Sub
2021/08/13(金) 10:14:40.50ID:/ejQKQyrM
>>477
自分で責任取れるんならPythonでも何でも使えばいい
それができるだけの度胸とコミュ力がないんならどこ行ったって同じだぞ
2021/08/13(金) 10:23:05.89ID:zvWaH7NU0
>>477
vbaだと爆速、値で残せるなどのメリットもあるし、
要は使い分けだな
2021/08/13(金) 10:37:15.01ID:5J5GXzoka
テーブル機能は関数、VBAともに相性いいからとりあえずテーブルにするところから始めればいいんじゃないかな
2021/08/13(金) 11:50:40.69ID:c6dMXYo0a
>>475
判定をなおしてみました。こんな感じはどうでしょう。
If Target.Address = "$B$1" Then
Range("A5:A100").Clear
Exit Sub
ElseIf Target.Address = "$B$2" Then
If Range("B1").Value = "" Then
Exit Sub
End If
Else
Exit Sub
End If
2021/08/13(金) 14:43:20.07ID:MQNa+Oeo0
>>475
「B1が変更」かつ「B2が入力済み」の場合にも処理されるようにするのはどうでしょうか。
後、B1B2が数値である保証がないのも気になりました。
冒頭(Early Returnの部分)を

If Target.Address <> "$B$2" and Target.Address <> "$B$1" Then Exit Sub
If (VarType(Range("B1").Value) <> vbDouble) Then Exit Sub
If (VarType(Range("B2").Value) <> vbDouble) Then Exit Sub

に修正し、

Target.Value - Target.Offset(-1).Value

等の部分を具体的にRange("B1")の様にしてみて下さい。
2021/08/13(金) 16:54:07.44ID:HPpKMPwN0
いまだにテーブル機能を表のレイアウトの見栄えよくする機能だと思っている人いるんだなマジで。
興味ないとそんなもんだよね
2021/08/13(金) 17:27:51.79ID:Ko30HHoCa
Vlookupなんてテーブルありきの仕様(範囲可変対応、速度、列指定等…)だし、
VBA使う時はForで範囲の中の値をループ処理するのはテーブル使うのが1番完結かつ読み手に伝わりやすい(と思う)
興味ない人は触れることもないんだろうなぁと思うと寂しいね
2021/08/13(金) 18:51:34.24ID:Dh6ZDsQC0
VBA達人の皆さんありがとうございます
早速試してみます

皆さんはどのように勉強されたのですか?
VBA2年目ですがまだまだ初心者から脱却できません
2021/08/13(金) 18:51:53.98ID:HPpKMPwN0
まだ良いよ
見栄えよくすると思い込んでいて、何でもかんでもテーブルに変換する同僚がいるから
出力でそれやられると見辛い
2021/08/13(金) 19:17:27.00ID:zvWaH7NU0
>>488
色々書きまくるしかない
あと、たまには違う言語を触ってみるのも良いと思う
簡単なゲーム作るとか
2021/08/13(金) 20:37:12.04ID:fD7XP3Na0
変数を日本語にすると頭に入りやすい
2021/08/13(金) 20:55:03.16ID:Dh6ZDsQC0
>>490
> >>488
> 色々書きまくるしかない
> あと、たまには違う言語を触ってみるのも良いと思う
> 簡単なゲーム作るとか

色々簡単なことから挑戦していきます
2021/08/13(金) 20:57:12.23ID:Dh6ZDsQC0
>>491

日本語に訳して覚えてみます
494デフォルトの名無しさん (ワッチョイ 9901-ic7f)
垢版 |
2021/08/13(金) 21:57:30.74ID:IVydqk9y0
>>479
やっぱりどう考えてもVBAで数値計算って無理がありそうですよね
数値計算自体も偏微分方程式の解を求めたり、モンテカルロで期待値を求めたりするので、結構重いです・・・
学生なんで確信を持って言えないのですが、恐らく就職希望している業界がVBAとc++がメインなのでVBAで数値計算をできるようになっておく必要があると思います。
とりあえずまだ時間があるので、一度自分でVBAで書いてみてからデメリットを実感して見ようかと思います
495デフォルトの名無しさん (ワッチョイ 9901-ic7f)
垢版 |
2021/08/13(金) 21:59:38.88ID:IVydqk9y0
>>481
確かにそうですね・・・
正直言語の違いなんて手段の違い程度しかないとは思うので結局責任を取れるくらい、周りと話をつけたり、しっかり計画を詰めるほうが重要ですよね
2021/08/13(金) 22:15:24.05ID:al2VsHhL0
その分野には詳しくないんだが、不向きなのに何故VBAを数値計算に使うんだ?
エクセルならVBA使わずとも関数とかソルバーで出来るんじゃない?
2021/08/13(金) 22:24:34.19ID:zvWaH7NU0
>>494
それ就職先に直接問い合わせた方が良いぞ
vbaとc++を使う業界って聞いたことない。なにかの間違いだろう
2021/08/13(金) 23:20:47.22ID:WIfN9845M
賑わってるね
2021/08/14(土) 00:11:33.82ID:p2FjIi+P0
>>497
あっ…なるほど(察し
2021/08/14(土) 00:32:25.73ID:8xoU1q0D0
夏季休暇に突入したぜウェーイ!
2021/08/14(土) 03:50:50.70ID:2+Zp3qYIa
c++とvbaを両方とも使うのありますよ
ターボファンの3次元ブレード図面の自動生成をする為に
autoCAD用APIをc++使ってdirectXのシェーダーでやり
流体計算はcudaの並列計算する一方で
ユーザーインターフェースはExcelVBAで寸法入力させるんですよ
2021/08/14(土) 07:34:08.52ID:olTKpvXL0
何度も申し訳ありません

期間の日付をA5〜A100に自動で打ちあがるようにしたいのですが

例えばB1に整数3が入りB2に整数5が入った場合
A5〜A7に3、4、5
と自動で打ちあがるようにしたいです

B2に整数以外が文字などが入る場合は
例えばB1に3B2に英字のKが入った場合
A5に3A6にK
が打ち上がるようにしたいのですが

下記コードだと2回目以降はB1の値が変わっただけでは発火しないので
B2も変更しなければなりません
B1の値が変更されたら即発火させるにはどのようなコードで記述したらいいのでしょうか?

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address <> "$B$2" And Target.Address <> "$B$1" Then Exit Sub
Range("A5:A100").Clear
Dim cnt As Long
Dim i As Long, j As Long
j = 0
cnt = Target.Value - Target.Offset(-1).Value
For i = 5 To cnt + 5
Cells(i, 1) = Target.Offset(-1).Value + j
Cells(i, 1).NumberFormatLocal = "@"
j = j + 1
Next i
End Sub
2021/08/14(土) 07:41:00.78ID:X5b04eQGM
打ちあがるって何?
2021/08/14(土) 07:49:40.96ID:WRC7pvXs0
>>502
「はじめの整数」と「終わりの整数」を指定し、
「その間の数字を個別に整数で出力」したい

・B1が最初、B2が最後。ここは手で入力
・B1かB2どちらかを更新すると以下が走る

・出力範囲はA5:A100
・出力範囲は無条件で毎回clear

・整数以外の場合は、B1とB2の内容がA5とA6にコピー

>>503
「出力」の意味だろう
2021/08/14(土) 08:01:31.03ID:olTKpvXL0
>>503
> 打ちあがるって何?

すいません
出力です!
2021/08/14(土) 08:04:36.53ID:olTKpvXL0
>>504

その通りでございます。
B2には整数以外が入る場合もありますので
その場合はB1の整数だけが出力されればいいです
2021/08/14(土) 08:16:43.15ID:FeW4uPBDM
IsNumericでB2を判定してTrueならFor文を走らせて、FalseならB2をA6へ
2021/08/14(土) 08:16:49.28ID:WRC7pvXs0
>>502
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo err

'B1B2じゃなければ終了
If Intersect(Target, Range("B1:b2")) Is Nothing Then Exit Sub

'とりあえずクリア
Range("A5:A100").Clear

'メイン。整数じゃなければerrに飛んでコピーして終わり。trycacheみたいな事がしたかった
最初 = Cells(1, 2)
最後 = Cells(2, 2)
'
If (Int(最初) = 最初 And Int(最後) = 最後) Then

行 = 5
For i = 最初 To 最後
Cells(行, 1) = i
行 = 行 + 1
Next

Exit Sub
End If

'整数以外
err:
Range("a5:a6").Value = Range("B1:b2").Value

End Sub
2021/08/14(土) 08:17:31.92ID:WRC7pvXs0
>>507
numericだと小数のときにめんどくさくなるよ
エラーで飛ばしたほうが早い
2021/08/14(土) 08:32:21.96ID:olTKpvXL0
>>508
ありがとうございます!
まじすごい
半年ぐらい考えて調べてやってみて
全然できなかったのに
一瞬でできるなんて…

プロの方ですか?
2021/08/14(土) 08:34:31.28ID:FeW4uPBDM
あぁそうか整数の時だけなのか
でもOnErrorResumeNextはバグを見逃しやすくなるから個人的にはあんまり使いたくねぇなぁ
lsNumenic(B2)の後にB2=CLng(B2)で整数判定かけるのってどう?……見辛くなるか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況