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/07/29(木) 23:42:59.81ID:1PJWae7Yd
>>331
まじこれ
Excel使いながらベンダーロックとか騒いでるのが爆笑なんだがww
黙ってGoogleスプレッドシートでも使いながらGoogleにロックされてろよww
2021/07/29(木) 23:51:41.95ID:p4SukJyH0
ExcelVBA MS言語
ACCESSVBA MS言語
Python MS言語
VB.NET MS言語
C# MS言語
C/C++ 準MS言語

Ruby 松本言語
PHP 公式な規格なし。事実上の私言語。Rubyと同格
Perl オワコン

JavaやGOはじめほかの言語もだいたいGoogleやその他企業の私物

ベンダーロックされない言語などあるのだろうか?
むしろ国際規格をきっちり定めているMS言語はもはやベンダーアンロックではないか?
2021/07/29(木) 23:58:22.70ID:zVCmdr7a0
>>333
国際規格で草
その国際規格を制定するメンバーは大抵intelやmicrosoftなどの大手企業
html5に至っては消滅したわ
2021/07/30(金) 00:35:30.86ID:4LnMwhZSM
国際標準ならECMAやISO、日本標準ならJIS
336デフォルトの名無しさん (ワッチョイ 5d01-By/s)
垢版 |
2021/07/30(金) 04:01:44.41ID:AGz2ssQM0
ヒキニートの言う事より、あわしろ氏を信じる。
2021/07/30(金) 13:35:36.57ID:F+iyq/jq0
そりゃニートは潤沢に時間があるからいくらでも勉強し放題だしな
詳しいわけだな
2021/07/30(金) 13:55:06.34ID:egyKewAD0
>>334
そう、つまりMS言語は国際規格になっているのでベンダーロックインはあり得ないということ
逆にRubyは国際規格ではないし開発者が勝手に仕様を頻繁に変更する
これは今までに実績があるし本人が言ってる事
さらに言えばRubyはRailsがあってこそ初めて成り立つ開発言語
言語仕様からコンパイラ、エディタ、ドキュメント、サポートまで全て一社でサポートしているMSとは比べようもないリスクがある

Javaを見ただろうか?
MS言語ではないばかりにあんな事になっている
Rubyを見ただろうか?
バージョンアップごとに対応作業に追われている
しかもRubyの変更とRailsの変更で2倍の対応工数をとられる

MS言語はVB6(1991年発売)が今でも第一線で働いている
ExcelVBA(1993年)なんてここ数年でさらに盛り上がりを見せている
もっとさかのぼると1980年代にはBASICは今とかなり近い文法が完成されており
1985年のQuickBASICに至ってはほぼ今のVBと変わらぬ開発環境を整えており36年にわたって同じ開発環境が通用していることを示している

移り変わりの激しいIT業界で36年だ!それがMS言語の息の長さであり変わらぬことの強さなんだ

MS言語を信じなさい。MS言語に導かれよ!!
2021/07/30(金) 14:00:09.98ID:omgprq0F0
>>338
あー
だからRubyってあんなに年収やっすいんだね
2021/07/30(金) 14:09:56.93ID:eptPeGDTM
国際規格じゃなくて
デファクトスタンダードな
341デフォルトの名無しさん (ワッチョイ 4ea4-qtbA)
垢版 |
2021/07/30(金) 19:01:26.28ID:L6BL7yno0
レンジ上で足し合わせて入力はできないのでしょうか?
range(c1:c2)=range(a1:a2)+range(b1:b2)
だとエラーになってしまいます

range(c1:c2)=range(a1:a2)
これはできますが…
2021/07/30(金) 19:49:10.10ID:XTDmAoXAa
Valueの概念をググッといて
2021/07/30(金) 21:11:34.63ID:qdQMd8Fb0
オフィススプリクト?だかに移行したいが
VBユーザーがどうにもならんのよ
2021/07/30(金) 21:13:59.49ID:4AGntX9d0
いや両方載せればいいだけじゃん
2021/07/30(金) 21:25:29.88ID:CiBkTLYM0
>>341
もし会社とかでこんなこと訊かれたら頭抱えるわ…
2021/07/30(金) 21:42:30.69ID:zYpnMfjf0
>>341
雑に説明するとね
Rangeは箱で入力されているデータは箱の中身なんだ
だからRange(B1:C1)=Range(B2:C2)みたいにA2:B2って箱をA1:B1に複製する事は出来る
でもあくまで箱そのものを操作するだけだから箱の中身をいじる事はできない
ならどうするかっていうと箱の中身を箱から出してやる必要がある
その為には値を1つ1つ指定してそれぞれで計算してあげなきゃいけないんだ
だからRange(″A1″).Value=Rang(″B1″).Value+Range(″C1″).Value
Range(″A2″).Value=Rang(″B2″).Value+Range(″C2″).Value
ってやるのが正しい
2021/07/30(金) 21:42:52.63ID:91KFOglq0
なんで頭抱える必要があるんだよ
「できない」の一言で会話打ち切りゃ良いだけじゃん
2021/07/30(金) 22:24:06.27ID:lExP/Tyw0
>>333
CがMS言語って・・・
K&RがCを開発したのが1972年、マイクロソフト創業が1975年だぞ
2021/07/30(金) 22:24:33.76ID:4AGntX9d0
スピルでやれって感じ
2021/07/30(金) 22:40:24.48ID:6IY+PAJYM
>>341は別にそんなにおかしな発想ではないと思うけどな
Rangeに対する別のRangeが値のコピーになるのはRangeに対する代入操作が特別にそのように定義されているから(デフォルトプロパティ)で、>>346の言うような「箱」じゃ説明がつかない
=が特別扱いされるなら同様にRange同士の演算が定義されていたって何ら不自然なことはなくて、たまたまそういう仕様になっていないだけだ
2021/07/30(金) 22:53:33.06ID:GVWaTyU8a
SumなりUnionなりあるじゃん
それも「できます」ってのもできてないし
2021/07/30(金) 23:00:06.71ID:xRZDPXU/M
もっともらしい説明をするとしたら、
Rangeはあくまでシート上の特定の範囲を指すものであって、必ずその値はシート上に実際に存在していなければならない。
z = x + y は x + y を先に演算してその結果を z に代入するわけだが、Range同士の加算を行った時点では結果の代入先がまだ決まっていない。
従って、必ずシート上に値が存在しなければならないというRangeの定義に矛盾する。
でも実際これは詭弁で、Range同士の加算がRangeではない行列みたいな値を表すオブジェクトを返し、それをRangeのデフォルトプロパティが受け容れればいい話なんだよね
2021/07/31(土) 00:35:02.17ID:/OoU0klK0
Rangeが箱みたいなものってのはまあ良いんだが
VBAではRangeのようなオブジェクトに対する演算とかはできなくて、その場合は箱の中身(デフォルトプロパティ)を演算する

Range("C1:C2") = Range("A1:A2") + Range("B1:B2")がエラーなのは、 Range("A1:A2")の中身が足し算できないものだから
結果の代入先が決まってないとかじゃなくて、結果を出せないからエラーなんだよ
354デフォルトの名無しさん (アウアウクー MMc5-qtbA)
垢版 |
2021/07/31(土) 00:42:26.77ID:mCBqZyxbM
>>341
少し違うけど似た事は毎回思う
表計算ならc列=a列×b列〜z列みたいな処理が普通だしそういった列ごとの記述はないの?
355デフォルトの名無しさん (ワッチョイ cd8e-Z1qT)
垢版 |
2021/07/31(土) 00:46:23.19ID:mBcGx4p70
>>341
馬鹿は足し算しかしないの?
2021/07/31(土) 01:07:37.07ID:z2VXpram0
配列大好きなphpにも無いし諦めて
2021/07/31(土) 02:01:59.82ID:zyTpcIefM
numpyじゃねーし
358デフォルトの名無しさん (ワッチョイ 4ea4-qtbA)
垢版 |
2021/07/31(土) 02:12:54.61ID:VZqzqhPL0
ありがとうございます
出来ないんですね
私の書き方が悪くてエラーになっているのかと思っていました

演算張り付けやスピルみたいなイメージで
似たようなことが出来るのかなあと考えていました

>>356.353.352.350.347.346
359デフォルトの名無しさん (ワッチョイ cd8e-Z1qT)
垢版 |
2021/07/31(土) 03:57:57.92ID:mBcGx4p70
>>358
単にお前が馬鹿なだけ
行列計算とか言ってたのならわからんでもないけど
2021/07/31(土) 07:18:03.75ID:m7lSxL/B0
>>341
Valueの概念とか謎の箱理論とかは無視していいw
>>350の言うように言語仕様としてできないだけ
RANGEじゃないけどFORTRANみたいに配列同士の演算ができる言語もある
2021/07/31(土) 07:34:59.93ID:gz49wtMt0
rangeは範囲だから2セルの範囲に4セル分は入らない
2021/07/31(土) 09:51:11.76ID:BQeiJ/1Ba
念のため言っとくがイキって煽り散らしたいだけのハゲは無視しとけな
2021/07/31(土) 13:09:56.95ID:54/p9ERo0
バカバカバカバカ言わないでよ
もっと平和的にやりとりできないの?
こんなに優れた無料の質問スレなんだから品位を保つべき
2021/07/31(土) 13:15:16.77ID:TRd8RGa80
ならまずは>>363がドレスコードを守ってくれ
2021/07/31(土) 13:26:23.66ID:r3PlISUvH
当スレは頭の寂しい方はお断りしておりますので
2021/07/31(土) 13:26:59.26ID:z2VXpram0
>>363
なにか勘違いしているようだ
平和とか無料とか、どこかでコストがかかっている。それは誰かが負担している
「日本の平和」はアメリカの核の傘による米軍基地がコスト
掲示板の「無料」は広告。広告が実質ない5chなら、罵倒やマウンティング好きなアホが紛れる事がコストなんだ

君は
・「重火器が飛び交う戦場で無償で敵味方にその場で教えてもらう」
って事をしているんだ
もし平和的に回答がほしいなら、先に「おもしろ画像貼りますんでなんとか解決お願いします!」
みたいにすれば色々と有線して解決してもらえるんじゃないかな
2021/07/31(土) 15:03:38.39ID:yzAefFWlp
>>363
マウントじじいが貢ぎもの差し出せって。
でもこんな頭のおかしい連中ばかりじゃないから気にしなくていいよ。
2021/07/31(土) 15:37:59.04ID:Opw93OJSd
power queryがなかなか覚えられない
みなさんLETは使ってる?
2021/08/01(日) 00:37:47.31ID:ayuPdfaZ0
スレ間違ってないか?
2021/08/01(日) 16:26:51.08ID:12Gisk1n0
バカって言うヤツがバカなんだよ!
2021/08/01(日) 18:09:12.14ID:xwQRbrXaM
と、バカが申しております。
2021/08/01(日) 19:13:18.52ID:hqZEeiIx0
馬鹿ばっかりだな
2021/08/01(日) 19:46:33.48ID:RrQoAxKz0
むしろ寂しがり屋なのでは
374デフォルトの名無しさん (ブーイモ MMbe-j+NH)
垢版 |
2021/08/01(日) 20:59:52.11ID:SyCmN3PQM
ハゲばっかりやな
2021/08/01(日) 21:21:35.58ID:12Gisk1n0
毛の話しろよ
2021/08/01(日) 22:28:03.58ID:PkMCEWYW0
不毛だな
377デフォルトの名無しさん (ブーイモ MMbe-j+NH)
垢版 |
2021/08/02(月) 01:09:21.06ID:H8/w6NZQM
そんなつもりは毛頭ないのですが
2021/08/02(月) 13:19:27.48ID:UEok/DKqd
お前は頭髪がない
2021/08/02(月) 13:22:42.78ID:T+xK0N6pd
俺の芋頭がこんなに頭髪ないわけがない
2021/08/02(月) 18:21:53.57ID:R1Xzu7pP0
でもおまいらは禿げてるんでしょ?
2021/08/02(月) 23:15:41.33ID:x232xQhs0
>>358
クッソ亀だけどこれでいけない?
Range("C1:C2") = [A1:A2 + B1:B2]
2021/08/04(水) 00:57:35.42ID:0L18Nxkj0
>>370
バカって言うヤツがバカって言うヤツがバカなんだよ!
2021/08/04(水) 14:28:57.13ID:lGrUtpF/0
うるせーバカ!
2021/08/04(水) 15:03:01.69ID:09lFZjv40
相手を見下すというのはそれ相応の教育しかない方が行う所作であります故
2021/08/04(水) 15:54:39.96ID:jCZ4Eczla
アホだ
386デフォルトの名無しさん (ワッチョイ 8eba-By/s)
垢版 |
2021/08/04(水) 16:41:44.16ID:IdaynBO00
マウスで選択した範囲のハイパーリンクを自動で開きたいんですがどこを変更すればいいでしょうか?
Aにハイパーリンク A2からA4をマウスで選択 
A1 B1 C1
A2 B2 C2
A3
A4

A99 B99 C99

Sub Macro1()
' Keyboard Shortcut: Ctrl+Shift+P
Dim SelectionArea As Range
Set SelectionArea = Selection
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End Sub
A5
2021/08/04(水) 17:04:08.48ID:IZchSkQ4a
>>386
SelectionのRangeをFor Eachで回してひとつひとつ開いていく
のがVBAの一般的な回答になるかと
2021/08/04(水) 17:16:32.22ID:5a+p99Z60
変数に入れてる意味なくて草
2021/08/04(水) 17:19:31.98ID:09lFZjv40
>>388
変数に入れるかどうかは「わかりやすさ」が関係してくるよ
個人開発が大きいVBAでその度合いを嘲笑するのは良くないと思う

ただ、386は俺も何やってるかよくわからん
2021/08/04(水) 18:15:11.64ID:Ww92yPFZa
テーブルで、フィルタしたあとの行削除をマクロの記録でやりたいけどうまくいかない。
フィルタして出たのが1行だとうまくいくけど、複数だとエラー。

テーブルがある。ある一つの列の、特定の文字をフィルタする。(その文字がないときはマクロ押さないつもり)
その列の上の下矢印で全選択、可視セルのみ選択。タブの行削除。フィルタ解除。
この流れってマクロの記録じゃムリ?
1行
で1004エラー?
2021/08/04(水) 18:44:53.04ID:bSPJ2kBBM
マクロで処理するならフィルター要らないかな
記録だけでコード書くのは無理がある処理かな
2021/08/04(水) 18:51:01.89ID:7NmqzzLqM
ムリ
2021/08/04(水) 20:15:52.27ID:14yWBG2X0
マクロの記録だけで業務改善する職場って未来あるよな
2021/08/04(水) 20:43:15.85ID:b6iWr/iv0
未来は僕等の手の中
2021/08/05(木) 14:48:49.27ID:+e5nazzCa
390ですがインストラクターのネタ帳ってとこの改造してみたらできるようになりました(毎回エラーでるけど成功してるので気にせず😌)。

p.s.
印刷時の見た目だけがいい、セル結合された表テンプレで作業を求められる同士が救済されますように…。。
2021/08/06(金) 16:13:36.56ID:T/jNWxQK0
ドの付く初心者です、というよりこういうのを作るのも初めてです

Findで任意の文字列が入ったセルを取得して、A1からそのセルまでを削除するマクロを作りたいのですが
Findの返り値がRangeなので削除するときの範囲指定がうまくいきません
たぶん基礎的なところを理解してないのでダメなんだとは思うんですが、とっかかりが欲しいです
お力をお貸しください

Dim rng As Range
Set rng = ThisWorkbook.Worksheets(1).Range("A1:A10000") _
.Find(What:="SUGOI", LookAt:=xlWhole, SearchOrder:=xlByRows)
これでrngに任意の文字列の座標を取得

この後ろでRange().Delete使って消したいです
2021/08/06(金) 17:02:36.53ID:Oz5kLkmeM
.range(.cells(1,1),.range(適当な範囲)).delete
2021/08/06(金) 20:18:49.98ID:8V+dHMZB0
削除して無くなったセルを詰めるのだろうか
2021/08/06(金) 20:58:11.36ID:3pn6mo5YM
マクロの記録で、、、
2021/08/06(金) 20:58:32.58ID:ZjxmW7bq0
どういう範囲指定か分からんけど返り値のRange.Rowで行数も取れるよ
FindはExcel上のCtrl+Fにも影響するからForEachで検索するようになったな
2021/08/07(土) 13:00:42.96ID:slTH9qD1d
>>397-400
皆様アドバイスありがとうございます

この土日はPCに触れられないため、助言をすぐ実践!とはいきませんが
いただいた助言、ありがたく試させていただきます
2021/08/07(土) 16:23:06.08ID:IR0XtVNG0
Range("A1",rng).clear
Deleteじゃなくてクリアしたいならこれ
2021/08/08(日) 08:21:09.95ID:ebb310K00
クラスでメインコードがすっきりとしていると機能追加も楽だね
2021/08/08(日) 10:53:34.69ID:Yzbpuv/w0
コード書いてる時ってどんな気分ですか?
2021/08/08(日) 10:59:34.31ID:5UdbG2j90
パズル解いてる気分
2021/08/08(日) 11:24:54.00ID:XIbBz2idd
めんどくせー
結果だけ欲しい
2021/08/08(日) 11:53:06.78ID:/228TsvP0
外注すればいいんじゃね
2021/08/08(日) 15:58:39.73ID:wvip2OSH0
たしかにパズルだな
2021/08/08(日) 16:26:56.76ID:gGBnC+Z00
美少女パズルRPG「パズルガールズ」
https://cdn.amz.appget.com/c/wp-content/uploads/2021/07/pg_8142870_1.jpg
2021/08/08(日) 16:30:40.54ID:N9yN2q6hM
VBAなんて所詮操作の
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
自分が書いたコードを公開すればいいのに、みなさんよくこの質問を答える気になるね
■ このスレッドは過去ログ倉庫に格納されています