Excel VBA 質問スレ Part65

■ このスレッドは過去ログ倉庫に格納されています
2020/03/17(火) 16:27:20.88ID:hh8LiIgR0

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

※前スレ
Excel VBA 質問スレ Part64
https://mevius.5ch.net/test/read.cgi/tech/1575297834/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/04/29(水) 18:51:15.87ID:IoQm9XvmM
msgboxの使い方
inputboxの使い方
Do loop
For next
if then else
初歩だけどここらを色々繰り返し勉強してると楽しい
msgboxは使い方もっと応用していきたい
楽しみながら勉強するといいですね
他にもっとお勧めの処理ありますかね。

あとさらに低レベルな疑問なんですが
vbYesNo
vbOkCancel

これってみんな細かに使い分けます?
タイトルとメッセージで誘導してあげて
elseで何もしないにするとほぼ通じちゃいますよね
これも使い分け必須だったりするのでしょうか
2020/04/29(水) 20:00:57.74ID:ZY0E7GgZa
やってみればわかると思うが
2020/04/29(水) 22:30:45.80ID:sZxShGZL0
メッセージBOXが出ている状態でESCキーを押された時の挙動が違う。
725デフォルトの名無しさん (ワッチョイ a78e-DBwA)
垢版 |
2020/04/29(水) 23:54:48.02ID:GcIsSLnW0
>>722
そろそろ馬鹿は死ね
2020/04/30(木) 00:04:19.84ID:UCocORui0
vbaって必要に迫られてやることが圧倒的な気がする
だからおすすめの処理とか言われてもな
2020/04/30(木) 02:12:11.10ID:e+nUl/nvH
同意
VBAは使わなくていいなら使わない方が望ましいわけで、
おすすめと言われると「まずはVBAを使わなくてよい方法を考えること」としか言いようがない
2020/04/30(木) 03:10:10.69ID:mLi4d9n50
道具なんて使う人次第
手作業とワークシート(数式)とVBAと別アプリと、何でやれば一番楽で間違いが起きにくいか比較検討して使い分けるのが理想
2020/04/30(木) 03:36:49.13ID:gai1ourp0
>>722
きびしめの意見が続いてかわいそうになったので
めげずにがんがれ
2020/04/30(木) 03:50:06.96ID:HupizHgZ0
数式だとすぐぶっ壊されてその修正に手間がかかるのでVBA使うのが好き
仕方なく数式に頼ったとしても、数式を一括修正できるボタンとかVBAで作っちゃってる
数式入ってるセルに保護かければいいじゃんって思うだろ・・・・
そうするとな、なんでここには入力できないんだよ!ってクレームがな、
いや、そこはここのシートのこの値が転記されるようになってて・・・とかいう説明を聞き入れる輩じゃないんだ
2020/04/30(木) 04:08:29.30ID:mLi4d9n50
人に渡すブックなら、VBAは消してシートはバックアップを取っておく
何やったっていじるやつはいじるし文句を言うから、結果だけを渡すようにしとかないと
2020/04/30(木) 04:41:41.42ID:HvDy85U60
>>722
>お勧めの処理
VBAが初心者でも簡単に扱えるのは
エクセルというGUIがついてるから

だけど普通のCUIプログラミングも
できると技術的に幅が広がるだろう

たとえばPythonとかRubyとかでね
2020/04/30(木) 04:48:14.38ID:HvDy85U60
>>730
>>731
複数人利用で関数メインだと
すぐぶっ壊されるのは分かる

あと壊れなくても長期的には
VBAの方が修正が楽だよな?
関数は処理の全体像が不透明
734デフォルトの名無しさん (ワッチョイ c763-+JA7)
垢版 |
2020/04/30(木) 06:40:13.36ID:PqPYAyi70
まぁ関数でできる処理は関数でした方が処理自体速いんだけどな
悩ましいけどセル保護だけじゃなく列や行を隠しとかもするけど、いじる人は何しようと結局いじるからね…

VBAと関数で使い分けしないとVBAはどんだけCPUのコア数あっても1コアでしか動作しないから、重たい処理になると頭打ちになる
2020/04/30(木) 07:48:59.33ID:OrbFqVlKx
ワークシート関数が処理の全体像が不明っていってる奴はたぶん関数がセル内できるのを知らないとか、テーブル機能を知らないとか、たぶんそんな感じだろう
ワークシート関数もVBAも下手くそに作ればカオスになる
2020/04/30(木) 08:27:32.50ID:/wWgOKjWM
なるべく関数はエクセル内で完結させてる
何かの呼び出しや処理のみにVBAにやらせてる
マスター版を個人で持っておく
いじられてもよほどのことが無い限り知らんふり
2020/04/30(木) 08:46:50.92ID:HvDy85U60
一年後に処理の内容全部忘れてから
もう一回見てご覧?
関数よりVBAの方が分かりやすいから
2020/04/30(木) 09:38:23.87ID:OrbFqVlKx
ワークシート関数の見通しが悪いのはシートの使い方や関数の書き方が悪いから

テーブルで構造化参照させる
多重ネストをしないように作業列を積極的に使う
多重ネストが避けられない場合ははセル内改行する
静的変数として固定セルを参照する場合は名前付きセルにする

こういう配慮をしているかどうかが大切

可読性はVBAと大差ない
VBAだって下手に書くと二度とメンテナンス出来なくなる
2020/04/30(木) 10:14:10.91ID:dUO320lFH
>>737
VBAだけ見りゃ理解できるように書いてあるんならいいさ
ハイスキルな君の書くVBAもきっとそうなのだろう
ただ、世の中のほとんどのVBAマクロはワークシートのレイアウトに激しく依存しており、
シートと見比べないと意味不明だし簡単に壊れる
2020/04/30(木) 10:50:37.55ID:KvTMWgJl0
>>713
そうなの?じゃあ俺の検索力不足だ。
教えてもらえるとありがたい
2020/04/30(木) 11:52:42.58ID:RI8oXcu50
シート連結部分はクラスにしようぜ
2020/04/30(木) 18:07:04.25ID:R8msXZW7a
クラスターつくるのか
2020/04/30(木) 20:10:03.51ID:6PshQwim0
>>737
これは分からんでもないわ
744デフォルトの名無しさん (ワッチョイ 671d-sUpK)
垢版 |
2020/04/30(木) 23:50:21.31ID:b9TIw4B40
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
745デフォルトの名無しさん (ワッチョイ a7f1-trzR)
垢版 |
2020/05/01(金) 00:54:45.32ID:+DHzH5tv0
>>744
この人タイでエッチするため在宅プログラマーになったって言ってるけど
うらやましいな
2020/05/01(金) 09:08:51.86ID:GU+C/Jnt0
はいつぎの方
2020/05/01(金) 10:00:32.66ID:6b7IUzcd0
Sub Sample2()

Dim Date1 As Date
Dim Date2 As Date
Dim i As Long

Date1 = "2018/1/1"
Date2 = "2018/4/30"

For i = 0 To DateDiff("d", Date1, Date2)

Cells(i + 1, 1) = DateAdd("d", i, Date1)
Exit For
Next i

End Sub

VBA初心者です
上記を実行すると強制終了してしまいます
どうしてなんでしょうか?
2020/05/01(金) 10:50:57.53ID:eM3SnLnx0
>>747
Exit Forを消す
あと、自分のミスで思った通りにならない時は強制終了とは言わない
2020/05/01(金) 12:14:21.59ID:gUWwrcBK0
"4/30/2018"
750デフォルトの名無しさん (アウアウエー Sa9f-kSwD)
垢版 |
2020/05/01(金) 13:10:21.56ID:n1w4ahs6a
#で括ってみては
751デフォルトの名無しさん (JP 0H9f-r+sk)
垢版 |
2020/05/01(金) 14:08:14.73ID:Lu25V/ckH
学術巨大掲示板群: アルファ・ラボ
ttp://x0000.net

物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など

PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
2020/05/01(金) 14:08:57.29ID:GU+C/Jnt0
>>747
回答としては748の通り

なぜこうなるのかわからない場合
 ・ブレークポイントを使ってどういうふうに処理が進んでいるか確認してみ?
 ・気になる行をコメントアウトをしてみる

などをするがよろし
753デフォルトの名無しさん (ワッチョイ a78e-MvRk)
垢版 |
2020/05/01(金) 15:46:49.34ID:O26w7br10
どうして馬鹿ばかり来るのか
754デフォルトの名無しさん (ラクッペペ MM8f-aR2J)
垢版 |
2020/05/01(金) 15:48:19.31ID:e9rmxAXgM
>>753
ようこそ!
2020/05/01(金) 16:42:17.98ID:w4TGDP35H
>>753
Welcome to the real world !!
2020/05/01(金) 17:52:33.49ID:XmUvZ7vC0
>>747
単純にすべての単語の意味を
把握したらそれだけで分かるよ?

最初の内は意味が分からないまま
コピペプログラミングだろうけど
ずっとそのままだと上達しない
2020/05/02(土) 03:52:34.32ID:gsxD2EFS0
皆さんありがとうございます。
初心者から脱出できるように勉強します
2020/05/02(土) 04:16:39.04ID:WlPNyw+i0
がんばれ
2020/05/02(土) 07:47:42.55ID:8I2uZvpu0
会社が休みに入って書き込みが減ったな
2020/05/02(土) 09:40:27.37ID:7uDOF2SH0
IE自動操作のマクロで

今まで動いていたが動かなくなる

コードに変化を加えると動く
(スペースでも改行でもコメントでも、プロシージャに変化があると動くようになる)

これはどういうあれなんや
2020/05/02(土) 10:47:09.64ID:8Sc54whm0
全角のスペースとかキーワード途中での改行とか

無意識にやらかしたんでないの
762デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/02(土) 11:30:23.32ID:Z+zF8E0a0
PowerQueryをVBAで使いたい初心者
>>690です。
変数に入れるファイルパスを、テーブルにしておかないと
PowerQueryは読んでくれないんだ。そのテーブル名とか列名も
指定するんだ、へ~、という現状からこの連休中に抜け出したいです。

テレワークからの連休突入前に先輩たちに投げた質問の答えは
「zoom飲み会やるから、入れとけよ。」でした。
2020/05/02(土) 11:33:04.58ID:qrZctUhv0
VBAむずいが努力だわ
昇級幅が大きい時代の残りカスの50代の職場のおっさん達が給料ばっかり高くて
ExcelのSUM関数すらわからないレベルで
電卓で計算してテンキーで手打ち
そんな信じられない存在がいる職場
「俺のやり方があるんだよ!」
とか、心の底から腹が立つ
大手で組合もあるからリストラはされないんだが
そんなやつを駆逐したい
エクセル関数は職場で使うものはだいたい使っておっさん共の10倍は早くやってきたが
更なる憎しみだけが俺のVBA勉強へのモチベーションになってる
2020/05/02(土) 11:34:32.51ID:jcfx6zQ80
>>760
そもそも、どう動かなくなるんだ?
エラーが出るのか?
Excel再起動で動くようになるか?
PC再起動で動くようになるか?

昔よくあったのがデバックやStopのように勝手に途中で止まるという奴。
F5で続行出来るんだけどまた途中で止まる。
Excelの再起動では治らんがPC再起動で治る。
2020/05/02(土) 11:44:58.03ID:u3ozWGyy0
>>760
Win10ではIEの動作が変わったのでVBAからコントロールするのがかなり大変になった

うまく動かない時は、ブラウザのキャッシュとかクッキーとか、WEBサーバの応答のタイミングとか調べる
変更しなくても時間を置けば動かないか、Excelを再起動したらどうか、パケットモニターとか調べた?
766デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 11:52:59.52ID:be7YjfFea
初めてのマクロでやりたいことはほぼ出来たのですが、新規ブックをコピー元のマクロごとコピーする方法が分かりません
xlsmで保存することは出来るのですが、どうもマクロの参照先がコピー元になっているらしく、新規ブックからマクロを実行するとコピー元のファイルをわざわざ開く形になってしまっています
マクロごとコピーする方法があればご教示ください
2020/05/02(土) 11:53:28.87ID:jcfx6zQ80
>>762
初心者がPowerQuery使うの?
その前にやることがあると思うんだが。

まず、テキストファイルを扱えるようになりなよ。
自在にテキストファイルを扱えるようになれば、どんな形式のCSVでも関係無い。
セル内改行も、そのCSVのフォーマットが分かってないのが原因。
普通はデ−タに改行が入ってるならレコード間の改行と区別する何かがある筈。
1レコードの項目数が必ず決まっている(1レコードのカンマの数が決まっている)とか、そのテキストデ―タは必ずダブルクォーテーションで挟まれており、データ内の改行はダブルクォーテーションのInとOutの間のどこかにあるとか。

もちろんPowerQueryでも良いんだけど、それでたまたま解決出来そうだから飛び付くのは良くない。
こんなもの基本的な処理の組み合わせで出来るんだから、PowerQueryで有利な何かも無いのに無理矢理使おうとしてるように見える。
2020/05/02(土) 12:25:11.14ID:E33c3GVR0
>>766
自分ではやったことないけどモジュールをそのままコピーするなら
http://officetanaka.net/excel/vba/vbe/07.htm#sample04
こういう方法じゃないかな

自分でやったことがあるのは
https://oshiete.goo.ne.jp/qa/756026.html
こちらの方法で、コードを一行ずつ書いていくことになります

ほんとにまるごとコピーでいいなら上の方法でしょうけど、thisworkbookとか
activeworkbookとか場合によって挙動が変わるような内容なら下の方法
じゃないかな
2020/05/02(土) 12:32:45.18ID:u3ozWGyy0
>>766
モジュールのエクスポートとインポートでやってみるとか
https://jizilog.com/vba-modadd
770デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 13:09:24.75ID:me7NM96ka
>>768
>>769
ありがとうございます
お恥ずかしながら、今更ながらアドインと個人用マクロブックの存在を知りました
マクロの数も多いので、毎回記述する方法は重くなりそうですし、インポートも考えたのですが、管理するのが大変そうだと躊躇していました
とりあえず、個人用マクロブックで一括管理してやってみようと思います
2020/05/02(土) 15:03:15.18ID:fjHWXn6td
>>768
これは、セキュリティ上の危険を承知するなら良いんだけどね。
今のExcelはデフォルトで動かないように設定されてるよ。

動作原理はマクロウィルスと全く同じなんで。
2020/05/02(土) 15:03:21.75ID:HkfyT0U40
>>770
マクロブックだと、最後の1ファイルを閉じてもアプリ画面が残っちゃう。
アドインだとこれを回避できる。
2020/05/02(土) 15:06:50.76ID:HkfyT0U40
>>771
そそ。D&Dでパワポにノートを読み上げるマクロをぶっ込めるvbs作ったんだけど、よく考えるとちょつと怖くなった。
774デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/02(土) 15:24:24.68ID:Z+zF8E0a0
>>767
あ、ありがとうございます。
テキストファイルから…。
連休の課題にします!
2020/05/02(土) 15:37:35.14ID:lt4kIJ5o0
>>767
VBAのスレで言うのもなんだが
PowerQueryの前にやることがVBAなのかと
2020/05/02(土) 15:54:13.09ID:WuBkO5o5x
>>762
テーブルとしての構造化参照が不要なら別にテーブルにしなくても「空のクエリ」でリテラル定数を返す接続クエリを作るなり、パラメータを登録するなりすれば良い
詳細エディタに
= "テーブル名"
って一行書けば"テーブル名"を返す定数クエリが出来上がる

あと、Letの前行に
(path as text, table_name as text, column_name as text)=>
とか追加すれば、path とtable_nameとcolumn_nameという三つのtext型の引数をダイアログ入力でクエリに渡せるようになるので、クエリ式の側をソース=Csv.Document(File.Contents(path))みたいに書けば良い。


どうしてもVBAからPower Queryをいじりたいなら
Workbook.Queries(Index).Formulaでクエリの式が読み書きできるので、Replaceを使うなりして好きにいじったらいいんじゃないの
777デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 16:19:14.33ID:be7YjfFea
>>772
なるほど、それはちょっと嫌かも
この際だからアドインも試してみることにします
778デフォルトの名無しさん (アウアウカー Sa3b-QanA)
垢版 |
2020/05/02(土) 17:01:28.47ID:be7YjfFea
何度もすみません
アドインを通常のマクロのように、図形などで作ったボタンに割り当てることはできないのでしょうか?
2020/05/02(土) 19:33:07.66ID:I/r+DzJx0
デバッグ中からリセットをかける際に特定の処理をさせるようなイベントプロシージャって無いでしょうか
2020/05/02(土) 21:25:13.04ID:fjHWXn6td
>>779
それは俺も知りたいね。
リセットすると確実にExcelが落ちるプログラムを安全に終了したい。
2020/05/02(土) 21:28:27.20ID:fjHWXn6td
>>778
アドインの場合、メインは別のブックになるわけだからアドインのシートとかは表示されないという基本は分かってる?

それが分かっていれば図形等で作ったボタンを配置する場所もないと分かる筈。

普通はメニュー(リボン)に作る。
2020/05/02(土) 22:09:54.71ID:7uDOF2SH0
>>764
>>765

数か月前の事なので返ってくるエラーは忘れたけど
どこかの部分で止まるのではなく、開始時に起きるエラーだったと思う
そのファイルを複数のPCで試したけど全てで同じ現象が起こる

で、subプロシージャのコードを一部変更して実行すると動く

コードの変更は何でも良くて
改行、何も書いていない行にスペース追加、コメント追加、コードを消して同じコードを書く
とにかく変化があれば再起動も何も必要なく正常に動く
変更後上書き保存してからは同じエラーは起こっていない

今は問題なく動いてるから困っては無いんだけど
あれは何だったのかなと思った
2020/05/02(土) 22:19:21.49ID:8I2uZvpu0
はあ、そうですか。しらんがな
2020/05/02(土) 22:37:34.51ID:zUyEitTf0
>>760
俺もさんざん悩まされたが、ByVal/ByRef問わず、関数にオブジェクト渡すのやめたら改善したわ。
何でもかんでもパブリックにすんなアホって言われてたから、パブリックという発想が中々でなかったが。

>>764
俺の場合は何の音沙汰もなく強制終了だな。
エラーが出ないし、PCによっては動くし、改行いれるだけで変わることもあるから、
どこがおかしいのか全然わからんかった。
互換表示とか保護モードの有無も関係ないし。
2020/05/02(土) 22:45:55.01ID:zUyEitTf0
多分、

Readystateコンプしてるのにエラーでるな〜
↓こうしちゃえ

On Error Resume Next
Do
 IEにカキコ
 Sleep 1000
Loop While なんとか
On Error Goto 0

長くて面倒くせえなぁ〜
関数化しちゃえ

で、オブジェクトを関数に渡して嵌る罠なんだと思う。
2020/05/02(土) 23:09:24.77ID:FzDABaHmM
>>782
それ、IEと関係なく、Excelの更新が原因でvba関係にエラー起きてるやつでは?
ファイル開くときに「エラーがあります、可能な範囲で修正しますか」みたいなアラートがでて、はいを押すとコードが全削除される。
2020/05/02(土) 23:36:58.40ID:qrZctUhv0
教えてくださいまし。。
画像のように日によって参加人数も競技した数も違うものを
受付した人と競技の範囲の値のみ
隣のシートに貼り付けるようにしたいですが
エクセル関数のエラーや未計算が都合上どうしても残ってしまい残ってうまく行かず…
https://i.imgur.com/Sd2Afas.jpg
https://i.imgur.com/MfnIQSU.jpg
https://i.imgur.com/lEQTEIe.jpg

受付した人の数字が空白になるまでは空白になるまで、競技も空白になるまで
その範囲のみをコピーというか可能でしょうか
2020/05/02(土) 23:39:12.79ID:qrZctUhv0
Sub 貼り付け()
Dim gy As Long
Dim re As Long Dim
Dim Tensu As String
Dim Kekka As String

Sheets(Tensu) = "点数"
Sheets() = "結果シート"

Sheets(Tensu).Select
With Range("C5")
gy = .End(xlDown).Row
If .Offset(1).Value = "" Then
gy = .Row re = .End(xlToRight).Column
If .Offset(, 1).Value = "" Then
re = .Column With .Resize(gy - .Row + 1, re - .Column + 1)
Sheets(Tensu).Select Range("H8").Resize(.Rows.Count, .Columns.Count).Value = .Value
End With End With
End Sub

これで作ってみたのですがやはり関数エラーが
邪魔してエラーになります
行も列も両方を空白までループして貼り付け
むずぃす
2020/05/02(土) 23:46:04.45ID:zUyEitTf0
画像から式を逆算するクイズみたいになっとる。
2020/05/02(土) 23:48:07.49ID:TR3WF5Jt0
人、それをデバッグと呼ぶ
2020/05/02(土) 23:48:58.13ID:zUyEitTf0
エラーってそっちのエラーかい!

If IsError(セルの値) = False Then の時だけ実行とか。
2020/05/02(土) 23:51:07.35ID:zUyEitTf0
それか、ValueじゃなくてTextでエラー回避。
2020/05/03(日) 00:01:44.09ID:fR4zqWYb0
>>788
全体的にめちゃくちゃで、それじゃ関数エラー以前にまったく動かないはずなんだけど、本当にそれで途中までは動いてるの?
スマホでポチポチ書き写すんじゃなくて、できるだけPCでそのままコピペしてくれない?
2020/05/03(日) 00:26:05.49ID:EGR1WLcw0
>>793
Sub test()
Dim gy As Long, re As Long
With Range("C5") gy = .End(xlDown).Row
If .Offset(1).Value = "" Then gy = .Row
cl = .End(xlToRight).Column
If .Offset(, 1).Value = "" Then re = .Column With .Resize(gy - .Row + 1, re - .Column + 1) Range("AA5").Resize(.Rows.Count, .Columns.Count).Value = .Value
End With
End With
End Sub

元々作これで動いたのを確認しやしたが
無力過ぎて悔しいっす
そもそもエクセル関数の方のエラーが出ないようにif関数で空白の場合はセルも空白にしようかと思ったけどそもそも他部署の管轄
俺の圧倒的力の無さですわこりゃ
2020/05/03(日) 00:31:44.93ID:EGR1WLcw0
というか完全に圧倒的勘違いでした

動いたと思っていざ使おうとしたら
他部署からのデータが画像のように
参加してない選手のところにセルにエラーがついてくる仕様なのに気付いて動かなかった
これが正解です
頭おかしくなってますわ
2020/05/03(日) 00:38:44.40ID:fR4zqWYb0
>>794
ワークシートの数式を消しちゃっていいんなら、エラーの出てるセルを全部空白にするのは簡単
Sub エラー全部消す()
 Dim c As Range
 For Each c In ActiveSheet.UsedRange
  If IsError(c.Value) Then c = ""
 Next
End Sub
2020/05/03(日) 01:01:50.07ID:fR4zqWYb0
>>795
コピーしたいのは、赤枠の範囲でいいの?
https://i.imgur.com/hJcIMrT.jpg
2020/05/03(日) 01:03:01.84ID:fR4zqWYb0
それとも選手名も必要?
2020/05/03(日) 01:37:52.66ID:EGR1WLcw0
>>796
教えてくれてありがとうございやす
ただシート内の別のところにも数式待ちのエラーのセルがあって俺の管轄じゃないので全てのエラーを消すわけにはいかず…範囲指定するスキルもなく…

>>797
>>798
完全にその赤枠のところの「値」のみをコピーしたいです

それが毎回、選手の数と競技の数が違う
という感じです

選手Cが空白なのに選手Dは数値が入る
ということはないので
受付の列が空白になるまでコピーを
ループ?とか考えながら挫折してます
2020/05/03(日) 01:46:13.78ID:EGR1WLcw0
受付の行が空白のセルになるまでループしつつ
競技の列が空白になるまでループ??
んん?違うか

GWになのにExcel開いてずっとマクロで悩むとは…とんだステイホームですわ
2020/05/03(日) 01:55:50.90ID:yO9oP2CW0
ここに書かずなぜ動かして試さない…
2020/05/03(日) 02:10:58.89ID:fR4zqWYb0
>>799
はい、できたよ

Sub 数字だけコピー()
  Dim rr As Long
  Dim cc As Long
  Dim dat As Variant
  rr = Cells(Rows.Count, 3).End(xlUp).Row - 4 '高さを求める
  cc = Cells(5, Columns.Count).End(xlToLeft).Column - 2 '幅を求める
  dat = Range("C5").Resize(rr, cc).Value 'データを変数に入れる
  Range("AA5").Resize(rr, cc).Value = dat 'コピーする
End Sub
2020/05/03(日) 02:15:53.76ID:fR4zqWYb0
ごめん
ちょっとだけ修正させて

Sub 数字だけコピー()
  Dim rr As Long
  Dim cc As Long
  Dim dat As Variant
  rr = Range("C4").End(xlDown).Row - 4 '高さを求める
  cc = Range("B5").End(xlToRight).Column - 2 '幅を求める
  dat = Range("C5").Resize(rr, cc).Value 'データを変数に入れる
  Range("AA5").Resize(rr, cc).Value = dat 'コピーする
End Sub
2020/05/03(日) 03:59:51.25ID:PK0PPm520
この程度のものを人に聞かなきゃできないようじゃ先が思いやられる
これで職場の50代批判できるのかと・・・・
しかも最初のこれ>>787
もう少し日本語の説明能力上げたほうがいいんじゃないか
君何度もここでいろんな質問してるよね?質問の仕方からして酷すぎる

説明の例1:
この画像で言えばC5からE13の範囲を別シートにコピーしたいです
https://i.imgur.com/Sd2Afas.jpg
コピーしたい範囲は変化します。例えばこの場合はC5からI9までをコピーしたいです
http://i.imgur.com/MfnIQSU.jpg

説明の例2:
こういう画像をペイントで作る
https://i.imgur.com/u9Vhnj1.jpg




はぁ・・・おれ深夜に何やってんだか・・・
805デフォルトの名無しさん (ワッチョイ a7ad-ur4w)
垢版 |
2020/05/03(日) 09:15:39.22ID:iPr/hZRI0
>>776
ご助言ありがとうございます!
教えていたことの意味を調べながら勉強します。

ちなみにうちの職場では55歳のオバハンが独学で書いてるVBA
が一番「きれい」だそうで。教科書通りで、整理整頓されてる感じで
非エンジニアには優しいんです。(簡単なものしか作らない人ですけど。)
でも「リーダブルコード」とか「VBA実践のためのなんちゃら」とか
読んで勉強してるの見かけたので、心がけは見習いたいです。
2020/05/03(日) 09:19:57.52ID:6v/wuiGx0
> Sheets(Tensu) = "点数"
> Sheets() = "結果シート"

きれいだとか汚いとかいう以前に読む気が失せるな
入門書買ったとか言ってなかったっけ?
2020/05/03(日) 09:20:36.28ID:2hdRjZho0
>>805
>独学で書いてるVBAが一番「きれい」
>教科書通りで、整理整頓
それはあるかもな

プログラマだとなまじ他言語の知識があるために
トリッキーなことやりだす奴が一定数いるからな
効率が良い面もあるだろうが他人が理解しにくい
2020/05/03(日) 09:35:40.45ID:6v/wuiGx0
>>803
生血プログラマーなら1行にするべきである
2020/05/03(日) 10:26:05.54ID:9LS/Ekj10
ああ、

If a = True Then
a = False
ElseIf a = False Then
a = True
End If

みたいなやつか。
大っ嫌いだけどな。
2020/05/03(日) 13:07:08.60ID:T/wh1/tE0
a = Not(a)
でいいんじゃね
2020/05/03(日) 13:43:00.43ID:AWBCl49n0
エスパースレと化してる
2020/05/03(日) 14:21:40.36ID:jHKSsTzt0
>>810
そもそも>>809が何を言いたかったのかわからんが
それaがBooleanじゃないと同じじゃないからな
2020/05/03(日) 16:23:21.84ID:7ZZm2K4r0
たしかにそうだ
2020/05/03(日) 18:57:16.84ID:hVYH2JxT0
うん、>>809が何を言いたいのか不明瞭だな。
あのIf文も自分は嫌いじゃ無い。
見てすぐ分かるんで。

長くても短くてもすぐ分かれば問題なし。
a=not aでも別に良い。
2020/05/03(日) 20:02:39.59ID:GBCMW2mVM
If a = True Then
の時点で嫌い
2020/05/03(日) 20:33:25.77ID:INbjbW0w0
If a Then は気持ち悪いわ
2020/05/03(日) 20:35:39.32ID:9LS/Ekj10
>>814
オバハンが独学で書いてる綺麗なコードって、
a=not aを>>809みたいに書いてるやつかなと思って。
2020/05/03(日) 20:41:41.89ID:jHKSsTzt0
俺はBooleanにたいして= Trueは大概は冗長に感じるけどな
VBAは型がゆるいからなぁ
If a Then は気持ち悪いが、これは変数名が悪い
2020/05/03(日) 22:08:11.47ID:dDcWYHiB0
>>807
perl で組んだテトリスだったかな。あれ見たときはぶったまげた。

元々ワンライナーをやりやすい言語とは言え、あれはもう
何が何やらわからない世界だった。どんだけ頭いいんだよと。

でも、「こんなの理解できないの?ふ〜ん(にやにや)」みたいな
のは生産性的には駄目だよね。


美しさをトリッキーさに見出すか可読性に見出すかは人それぞれ
だけど、自分よりスキルが下の他人に保守させるとか、未来の自
分が保守しないといけないかもとかなら冗長性持ってるほうがいい
かも。

いちばん大事なのは懇切丁寧なコメントだろうけど。
2020/05/03(日) 22:21:26.63ID:dDcWYHiB0
>>805
> ちなみにうちの職場では55歳のオバハンが独学で書いてるVBA
> が一番「きれい」だそうで。教科書通りで、整理整頓されてる感じで
> 非エンジニアには優しいんです。(簡単なものしか作らない人ですけど。)
> でも「リーダブルコード」とか「VBA実践のためのなんちゃら」とか
> 読んで勉強してるの見かけたので、心がけは見習いたいです。

あえて長文引用させてもらったけど、あんた程度の人間がなんで
その55歳の女性を貶めてるの?
2020/05/03(日) 22:55:28.97ID:hVYH2JxT0
>>817
いや、想像はついてた。
大嫌いというのが分からんかった。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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