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/23(木) 10:00:29.56ID:80sunLmwM
>>562
アホなの?
>>476の「できてるから」の説明しろって話
自分で書いたことも理解してないのかよw
2020/04/23(木) 10:03:00.52ID:4BIs3zJP0
>>567
だから、金と時間を貰ってるというのが出来てると言ってる。

やり取り理解出来てる?
お前の指摘はまともな会社なら金と時間を貰ってるというものだった筈だが。
2020/04/23(木) 10:09:52.45ID:4BIs3zJP0
最低限、やり取りから解析に四苦八苦してるというのはまともな奴なら分かる筈なんだが。
とすれば、お前の言う金と時間を貰って、今まさにドキュメント起こす為の解析中(だった)なのが分かる筈。

これが前提なんだからドキュメントが既に出来上がってるなんてアホな誤解してたことは無いと信じたい。
2020/04/23(木) 10:18:34.00ID:pyQ+IxFJr
関係ない人はこいつらをNGにすればいいで
2020/04/23(木) 10:24:08.71ID:EgVweMy+a
まだやってるのか
完全に自粛ストレスだろうな
2020/04/23(木) 10:29:06.69ID:TPtGWxWfM
>>566
専ブラで引用の引用したことないのか?
まあその手の文句は専ブラの作者に言ってくれ

>>568-569
> だから、金と時間を貰ってるというのが出来てると言ってる。
あれ?
> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
って糞ドキュメントしか作成できないアホって自白してますけど?
発注した客可哀想
まあ脳内だろうから問題ないか…

> やり取り理解出来てる?
うん、どんどんボロが出てるねw
2020/04/23(木) 11:08:06.42ID:4BIs3zJP0
>>572
???
ドキュメント作るための解析に四苦八苦してるのと、出来たドキュメントの出来に何の関係が?

お前がドキュメント作ったこと無いのがこれでバレたw
2020/04/23(木) 11:11:09.39ID:4BIs3zJP0
何か、お金と時間貰うとロボットが勝手に解析してドキュメント作ってくれると思ってるアホがいるようだ。
2020/04/23(木) 11:14:19.21ID:4BIs3zJP0
というか、解析に苦労しないんだったら、糞コードなんて言葉は無い筈なんだ。
どんなコードでも誰にでも理解出来て楽に読めるんだったら、綺麗なコードを心がけるというモチベーションすら起こらない。
2020/04/23(木) 11:21:51.04ID:4BIs3zJP0
>>572
あと自白っていうのがこれまたおかしい。
最初の主張通り、何ら矛盾が無いんだから自白じゃ無いだろ。
それとも、まだ理解出来て無い?
2020/04/23(木) 11:24:06.86ID:5d1aUYQtM
>>573-574
え゛っ、まじでドキュメント作成で四苦八苦してるって事で誤魔化せるとか思ってるの?

> 調査費用と時間貰ってドキュメント起こすことになっても四苦八苦は変わらん。
そうすると何が何と変わらんのか説明できないだろw
2020/04/23(木) 11:25:47.51ID:RuZIZsvvM
>>575-576
レスをまとめることもできない無能
しかも内容スカスカw
2020/04/23(木) 11:32:54.64ID:4BIs3zJP0
>>577
えっ?
何度も言ってるのにまだ分からない?

「解析に四苦八苦するのは、時間とお金を貰っても変わらない」という日本語が分からない?

時間と金を貰って無くても、貰ってても、どっちでも四苦八苦はするという意味が理解出来て無かった?

日本人ですか?
2020/04/23(木) 11:35:35.71ID:4BIs3zJP0
日本語が通用しない程だから始末に負えない。
"引き継ぎ"も碌に理解してないぐらいだからな。
581デフォルトの名無しさん (ラクッペペ MM34-eHaU)
垢版 |
2020/04/23(木) 12:11:20.51ID:NJImmJ6MM
>>564
これから2週間が山場
2020/04/23(木) 13:25:04.48ID:UY53iXGX0
うまい
2020/04/23(木) 18:35:48.75ID:9EduGPIyM
レベルの高すぎる人同士での口論はとてももったいない
俺はIf Then ElseとFor nextは辛うじて理解できそうなレベル

Do untillとかNextとかloopとか使いこなしたい条件が山ほどあって泣きそうだけど
ここの上級者たちは独学で覚えた?
同じ事やろうと調べでもどのサイトもいろんなやり方でどれが良いかも分からない

ここで聞くとさらりと答えだしてくれる人ってどういう頭の良さしてんだろ
2020/04/23(木) 18:56:32.85ID:9prkr8SY0
基本的には場数
よい文章を書くには良い文章をたくさん読め
良いプログラムを書くためには良いプログラムをたくさん読めば良いんだが
まあ、よいプログラムをたくさん提供してくれる場がなぁ
2020/04/23(木) 19:20:59.53ID:R7RBEdEaM
>>584
ここ見てけばまぁ覚えやすいとか無難で間違いないとかそういったサイトありますか?
広告たくさんのサイトだろうが藁にもすがりたいほど身につけたくて…ノイローゼ気味

俺の業務に絞った時にVBAで何でもやらせようと無理せずに関数はエクセルである程度制御した方が後々メンテが楽なのがわかったので

恐らくloopの使い方を理解しないと絶対に乗り越えられない大きな壁が。。
それを作れたら後は数値の変更や応用でいけそうだけど脳が焼き付いてる
2020/04/23(木) 20:03:22.67ID:6e93QXlJd
>>583
本当にレベルが高い人は口論なんかしないんだよ
スレを荒らすのはだいたい無職
2020/04/23(木) 20:05:39.90ID:weP1rIDx0
>>585
まずはここにあるサンプルを、コピペせずに自分でキーボードから入力してみ
http://excelvba.pc-users.net/fol6/6_4.html
2020/04/23(木) 20:07:24.44ID:9prkr8SY0
>>585
本買え
初心者むけのをまず数冊

昔はプログラム系の雑誌結構あったんだがなぁ
2020/04/23(木) 20:16:07.01ID:IA7mxVD60
>>583
VBAの本って多いから学習しやすいはず

プログラマなら他言語の経験から
基本的な制御構文くらいは自然と分かる
VBAはプログラム言語としてはやさしい方
2020/04/23(木) 21:01:06.09ID:72/Ynz/da
まずは何をしたいか、エクセルでこんな便利なのを作りたいとか、ヴィジョンをもてれば上達は早いと思う
2020/04/23(木) 21:28:22.57ID:IA7mxVD60
そうだね

エクセルは小物ツール作りやすいから
実益を兼ねた練習を積めば上達するな
2020/04/23(木) 22:53:32.79ID:nGyVitY00
VBAなんて本腰入れてテキストで勉強するにはコスパ悪すぎる言語だと思うが・・・
「VBA」にやりたいことを付けてググったソースをコピペした方が早くないか?
2020/04/23(木) 23:13:30.67ID:/AKn5LJ4d
本を見てプログラミングを勉強する時代は終わりだと思ってる
紙の方が読みやすいと思う人が多いだろうけど、本格的にやろうとしたらオンラインのドキュメントは必須だし、
画面上で文字を読む訓練をして慣れていかないと、いつまでも能率が上がらない
2020/04/24(金) 00:05:26.21ID:4FfGWszI0
>>592
とりあえず動くものが作れればいいというなら、まあそうだな

>>593
学習リソースとしては、本かWEBかに本質的な差はないと思うが
中身の問題で、WEBは本ほど系統立てて編集されていないところが多いと思う

辞書だけで外国語マスターできるような人ならWEBだけでもいいけどな
2020/04/24(金) 00:19:26.49ID:aTlSrVmc0
>>592
>>593
書籍の学習は今でも必要だと
思うしさらにVBAだけでなく
他言語の経験があるといいな

VBAのスレで言うのも何だが
VBAプロパーのプログラムは
垢抜けない泥臭いのが多くて
その辺PHPと同じ感触がする
2020/04/24(金) 02:40:01.82ID:vJ3u9sjq0
>>531
どなたか…四苦八苦して終わりません、、
お時間ある方がいましたらお助けを
2020/04/24(金) 03:41:33.98ID:zeBff4Qi0
>>596
そうだな、取りあえず質問する時に相手に伝わるか考えながら質問した方が良いかな。

>元のVBAのフォーマット
???
これは何のこと?
何を言ってるの?

シートのコピーで書式だけコピーしたいということ?
だったらそんな機能は無いと思うから、あとは工夫でどうにかする。
Rangeの書式だけコピーはあるから、シートの追加と書式だけコピーの複合にするか、俺ならそもそもコピー元の書式を全部コードで実現してシ一トの追加とその書式を実現するコ一ドでやる。

右に追加というのが特定のシート(4月)の右というならコピーだろうがシートの追加だろうがそのものずばりの引数がある。
WorkSheets.Copy、WorkSheets.AddでクグるとMSのぺージが見つかるから、そこにサンプルもある。
一番右に追加していくというなら、上の特定のシートの部分に最後のシートを指定すれば良い。
最後のシートってのはシートの指定方法は名前と番号の2通り有るので、今回は番号で最後を表現する。
最後ってのはシート数が7個あれば7番目になる。
この場合の7個ってのはシートの個数。
シートの個数はこれまたそのものずばりのプロパティがある。
(これも上のページのサンプルそのもの。)
2020/04/24(金) 04:14:59.23ID:zODr3mBK0
>>531
5回読んだけど理解不能
画像や絵使って説明してほしいわ
2020/04/24(金) 09:43:49.82ID:5xvA7bcI0
>>583
いつも同じこと感じています
2020/04/24(金) 12:06:13.25ID:EzpkTm1A0
他の人は知らんが俺は独学でコマンドマニュアル見たり参考書買ったりしてた
例えば数値でも加算を繰り返してどこでエラーがでるかとかを
実際にサンプル作って実行することをひたすら満足いくまで繰り返したりしたな
学校の勉強と並行してやってたからいつも寝不足だったし
2020/04/24(金) 16:20:00.14ID:Enw/zcBV0
>>594
学習するのに何が効率いいかっていうよりも、
VBAを学習すること自体に対するリターンって意味でコスパが悪いと言いたかった

特にオフィス製品上でしか実行できない、やりたいことは単純な事が多いっていう特性上、
学習することでググったソースのコピペ以上に得られる物はあるのか?と。

内容を理解することでちゃんとしたコードが書けるってメリットはあるかもしれないが、
VBAで綺麗なコードを書けてもねぇ・・・
VBAのコードを拘るリソースは他に回すべきだ
2020/04/24(金) 17:35:34.28ID:vJ3u9sjq0
Sub Macro1()
  ChDir "c:\tmp"
  f = Dir("*.txt")
  c = 1
  Do While f <> ""
    Open f For Input As #1
    For r = 1 To 6
      Line Input #1, s
      Cells(r, c) = Split(s, vbTab)(2)
    Next
    Close #1
    f = Dir
    c = c + 1
  Loop
End Sub

ここで↑の
「指定した場所に入ってる全てのテキストのエクセル化した時の特定の列と行をエクセルシートに一気に読み込む」
という神の様なコードを教わったものです。

列と行の開始はこのままでいいのですが、テキストの行が空白になるまでエクセルに読み込む
というやり方に変える事は可能でしょうか。

これが職場の環境を大きく変えすぎて2人、本当に課からいなくなって現場に飛びました。
効率化しすぎて他でも応用できるようにしろと皆の前で大声で怒鳴られ泣けても知恵が出てこない
ゆっくり本読んで覚えていきたいにもまず最優先で作れと室内であんなに大声で怒られて
ネットで調べても調べ方すらわかっていなく
異動したい、何卒すみません
603デフォルトの名無しさん (ラクッペペ MM34-eHaU)
垢版 |
2020/04/24(金) 18:38:54.34ID:GFko4FvkM
>>601
普段の仕事がExcelならコスパいいだろ
2020/04/24(金) 18:40:11.73ID:zODr3mBK0
一から十まですべて教わらないとできないような人はやめたほうがいいわ
実力以上のコードを教わったところで何も応用できず周囲の期待には応えられない
5chで教えてもらって作りました
これ以上は分かりませんって正直に言えばいい
2020/04/24(金) 18:49:29.12ID:4FfGWszI0
ForをDoにして、NextをLoop Until S=""かな
つか、二人分の人件費が浮くような作業なら、ちゃんとした会社にシステム化たのめよ
2020/04/24(金) 18:51:14.82ID:4FfGWszI0
まあこれで動いたら>>602がさらなるドツボにはまるのをニヤニヤしようぜ
2020/04/24(金) 18:53:25.05ID:K658YEair
効率化して上司から怒鳴られるってどんな職場だ
上司がクソすぎ
2020/04/24(金) 19:12:23.15ID:aTlSrVmc0
背伸びしても上手くいかないもんだね?
2020/04/24(金) 19:16:29.79ID:sF/e/OCE0
>>602
ここに解決方法が書いてある
https://www.manpowergroup.jp/column/tenshoku/phrases-and-writing-of-change-wish.html
2020/04/25(土) 00:00:18.00ID:/63/MmUO0
コードくれくれ君
2020/04/25(土) 00:25:36.55ID:gc0CgTOT0
画像上部の21〜20日間隔の日付のセルの塗り潰しを下の1〜30日間隔の日付に塗り潰し変えたいんですがどうしたらいいですか?

・上部をforで2行目の最終列までループ
・ifで塗り潰し判定がTrue
・???
・???
・下部をforで2行目の最終列までループ
・ifで対象年月日間隔だったら塗り潰す

と、こんなイメージなのかなと思ってはいるんですが、??らへんの処理がわかりません。

https://i.imgur.com/I6hiP5r.png
2020/04/25(土) 00:30:28.43ID:XJisoOEM0
次から次へと馬鹿が出てくるのはなぜ?
2020/04/25(土) 00:36:47.04ID:8o24J96M0
Functionの任意引数(Optional)なのですが、初期値はstringかlong型のみだけしかダメなのでしょうか?
シート名objectの引数で、省略したときにActivesheetを返したいのですが、「定数式が〜」のエラーが出てしまいます。
やはり、IFとIsMissingを使うしかないでしょうか。

Function test(Optional objシート名 As Worksheet = ActiveSheet)
End Function
2020/04/25(土) 00:42:53.79ID:l10aoXHL0
そもそも引数とか型の意味理解してる?
2020/04/25(土) 00:44:19.85ID:7EOq2zNJ0
>>613
規定値に使えるのは定数値だけ
変数、プロパティ、関数などは使えない
だからActiveSheetも対象外
2020/04/25(土) 00:50:04.58ID:7EOq2zNJ0
>>611
その画像で説明すると、D3:K3をコピーしてC10:J10に書式貼り付けするだけでは
2020/04/25(土) 00:52:04.34ID:lAut8yEK0
>>611
D2からK3をコピーしてC9に貼り付けて C2をK9に貼り付けるだけじゃないの?
VBA使わない方が早そうなんだけど
2020/04/25(土) 00:53:34.41ID:bDeh6DKGd
>>611
塗りつぶす条件がわからなければわからない
2020/04/25(土) 00:58:07.71ID:a/EKdpBi0
>>602
Ruby なら、row.empty? で空行かどうか、判別できるけど

require 'csv'

CSV.foreach( "input.csv" ) do | row | # 1行ずつ処理
break if row.empty? # 空行なら、終了

puts "#{ row[ 0 ] } : #{ row[ 1 ] }"
end

入力ファイル・input.csv
あ,いう
a,bc

1,23

出力
あ : いう
a : bc
2020/04/25(土) 01:41:16.85ID:7EOq2zNJ0
>>602
読み込みを止める条件が空行とEOFの2つになると、とたんに処理が面倒になるんだよな
こういう時はLine Inputを別Functionに飛ばすとすっきりするんだけど、とりあえず汚い方法で書いてみた

Sub Macro1()
  ChDir "c:\tmp"
  f = Dir("*.txt")
  c = 1
  Do While f <> ""
    Open f For Input As #1
    s = "s"
    r = 1
    Do While Not EOF(1) And s <> ""
      Line Input #1, s
      If s <> "" Then Cells(r, c) = Split(s, vbTab)(2)
      r = r + 1
    Loop
    Close #1
    f = Dir
    c = c + 1
  Loop
End Sub
2020/04/25(土) 02:03:19.21ID:8o24J96M0
>>615
そうなのですね、ありがとうございました。
2020/04/25(土) 05:53:44.03ID:SWq+pauNM
>>613
If 文使うしかないのはその通りだけど IsMissing() は引数の型を Variant にする必要があるのであまり良くない

Function test(Optional objシート名 As Worksheet = Nothing) ' Nothing は既定値なので指定しなくてもいい
If objシート名 Is Nothing Then Set objシート名 = ActiveSheet
End Function

ってやるのが定番
ググると同じことをやってる人がいる
http://akashi-keirin.hatenablog.com/entry/2018/03/01/081945
2020/04/25(土) 13:56:29.68ID:gc0CgTOT0
>>616
>>617
名前は下にたくさん羅列してるし、日付も右にもっとずっとあるからVBでやりたい。
日付間隔が上下で違うからどうやったらいいかと思って。

for 上部名前シートループ
 for 下部名前シートループ
  if 名前同一
   for 上部名前年月日列ループ
    if 塗り潰し
     ※下部シート塗り潰し
    end if
next
end if
next
next

※の部分がどう書くのかがわかりません。

>>618
塗り潰す条件は同じ名前の人に対して同じ日付の所へ塗り潰す。
2020/04/25(土) 14:00:26.62ID:jVtajgfWr
>>623
元データのc列を消せば良いのでは
2020/04/25(土) 14:21:24.23ID:y/AcnKi/d
>>623
上部のD列から見ていって塗ってあったら下部の一つ左の列を塗る
2020/04/25(土) 20:10:34.52ID:Z1BPhcf20
下記のコードで出力範囲1と2をまとめるにはどうすればいいでしょうか
Set OutputRange = Worksheets("Sheet1").Range("B2:C10")
For i = 1 To 9
For j = 1 To 2
For k = 2 To 3
OutputRange(i, j) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, k, False)
だとB,C列ともに列番号3をの値になる、というか列番号2で処理した後列番号3でもう一度処理を
しているため、すべて列番号3の値になるんじゃないかとは思うのですが、具体的にどう直せば
いいか教えていただけるとありがたいです

Sub Test()

Dim SerchKey As Range '検索値
Dim SerchRange As Range '検索範囲
Dim OutputRange1 As Range '出力範囲1 B列
Dim OutputRange2 As Range '出力範囲2 C列
Dim i As Long

Set SerchKey = Worksheets("Sheet1").Range("A2:A10")
Set SerchRange = Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A2:C10")
Set OutputRange1 = Worksheets("Sheet1").Range("B2:B10")
Set OutputRange2 = Worksheets("Sheet1").Range("C2:C10")

For i = 1 To 9
OutputRange1(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 2, False)
OutputRange2(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 3, False)
Next i

End Sub
2020/04/25(土) 20:18:25.81ID:/63/MmUO0
このスレにくる質問見ると、俺に読解力がないのかなといつも思ってしまう
2020/04/25(土) 21:06:29.21ID:OxGSjC7Q0
>>626
VLOOKUPは答えを複数返す関数じゃない
2020/04/25(土) 21:14:48.21ID:OxGSjC7Q0
あ、質問の意味が今わかったわ
入れるセル変えずに関数の列番だけ変えてたらそりゃ同じ値しか入らない
中身がどうなってるか想像じゃなくて実際に確認すればどう直せばいいかわかるだろう
2020/04/25(土) 22:19:20.97ID:Z1BPhcf20
質問が説明不足だったようで失礼しました
出力範囲が複数列ある場合にそれぞれの列を「出力範囲1」「出力範囲2」と設定していけばいいという
ところまではわかったのですが、検索範囲が100列、出力範囲が99列、というように数が多くなった場合、
出力範囲のB列には検索範囲の列番号2  OutputRange1(i, 1)…… SerchRange, 2
出力範囲のC列には検索範囲の列番号3  OutputRange2(i, 1)…… SerchRange, 3
出力範囲のD列には検索範囲の列番号4  OutputRange3(i, 1)…… SerchRange, 4



という処理を99行書かずに変数で処理できないでしょうか、というのが質問の意図です
2020/04/25(土) 22:58:11.29ID:u3Cmop/t0
j の役割って何だろう?
2020/04/25(土) 23:00:40.63ID:OxGSjC7Q0
だから>>626のループの中身がどうなってるか見て順番考えたらいいんじゃないの
2020/04/26(日) 00:49:06.95ID:1a87l4R/0
>>630
同じような処理を繰り返したい時は配列を使う

Dim OutputRange(10) As Range '出力範囲
Dim i As Integer

For i = 2 To 3
Set OutputRange(i) = Worksheets("Sheet1").Range(Cells(i, 2), Cells(i, 10))
Next

みたいな感じで、変数を使えば、何十個あっても簡単にまとめられる
2020/04/26(日) 02:34:49.27ID:LqR8iAxp0
なぜ馬鹿ばっかり来るのか
2020/04/26(日) 06:16:38.34ID:+0ojgInc0
馬鹿ばっかり来るところにいるからじゃね
ってか自力でできるやつは質問なんかしないだろ
2020/04/26(日) 09:08:46.83ID:rBKIu5KT0
>>635
それググレカスキッズだと思う
>>612
2020/04/26(日) 10:18:45.13ID:LS9zyJ5J0
複数あるコマンドボタンをどれを押しても一つの処理に入り、押されたボタンを取得して、ボタンごとに判断処理ってできないのでしょうか。(activeXです)

具体的にはシリアルポートの処理で以下のことをやりたいです。
コマンドボタンが機器名、その機器ごとに存在する複数のコンボボックスにポート名やボーレートを設定。
あるコマンドボタンを押したら、対応するコンボボックス郡の設定を取得してポートを開く。(ポートオープンはモジュールに記述したWritefileでやってます)
ポートオープンで返ってきたハンドラが例外でなければ、押されたコマンドボタンの色を変更し、名前を"機器名+接続中"に変更。
また、コマンドボタンを押した時点で対応ポートのハンドラが存在すれば、そのポートを閉じて(ハンドラも初期化)、押されたコマンドボタンの色を戻す。

現在はボタンごとのプロージャを作成し、同じような処理を逐一書いてますが、機器が複数あって大変見にくいのと、記述が大変なのでまとめたいです。
2020/04/26(日) 10:39:23.22ID:oDDaXD960
>>637
それ、まともにやろうとするとかなり上級レベル。
上級者を自認する人でも出来ない人が結構いる。
2020/04/26(日) 10:39:50.30ID:1a87l4R/0
>>637
「コントロール配列」でぐぐれ
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html
2020/04/26(日) 10:44:46.17ID:1a87l4R/0
>>637
同じような処理なら、ボタンクリックのイベントの中で変数にボタン名を設定してから、別に用意した共通部分のSubを呼び出せばいい

ヒント
http://woodbook.kir.jp/excel/vba/button_row.html
2020/04/26(日) 10:46:58.47ID:oDDaXD960
おっ、それを貼るとは。
じゃあ、俺も。
以下の一連を全て理解し、使いこなせれば大分変わる。

http://addinbox.sakura.ne.jp/Breakthrough_P-Ctrl_Arrays.htm
2020/04/26(日) 11:53:55.15ID:LS9zyJ5J0
ありがとうございました
手っ取り早くやれそうな感じではなさそうです
2020/04/26(日) 12:03:24.99ID:3XXXGp1c0
>>639
懐かしいなコントロール配列
昔はよく使ったが最近使ってないな
2020/04/26(日) 12:07:36.34ID:oDDaXD960
>>642
一応言っておくと、途中迄なら出来るかもしれないし(それで十分かも)、読み物としても読んどくと良いと思う。
2020/04/26(日) 14:41:44.01ID:LS9zyJ5J0
>>642
紹介頂いたサイトの大元になるmougを参考にして押したボタンの色変えぐらいまでしかできません
この処理にシート画面上のコンボボックスの値を関連付けて取得する仕掛を入れたいのですが検討つかず
2020/04/26(日) 15:58:20.12ID:io10sll9a
各ボタン押した最初の処理だけわけて
引数つけて共通処理に飛ばせばよくね
2020/04/26(日) 18:40:06.52ID:IAQJrydO0
全部ここの人達のおかげで完全に憑き物が取れて教えて貰ったURLと持ってる本を参考にひたすら初歩のルールから愚直に
打っては実行を繰り返し練習してます

Do loop
For next
特にこれの破壊力は凄いですね
これだけの為に覚える価値すらあると感じました
あとはmsgboxの使い方の面白さ
感謝しかないです

Do loopでwhileとuntilがあるけどよほど複雑でない場合
書き方変えるだけで同じ処理させられる感じですが
基本どっちかでで使い方覚えていったほうがいいものですかね
質問というよりただただ楽しくここの上級者たちにも癖だったり自分ルールがあるのかなと
ああ楽しい
2020/04/26(日) 19:35:22.95ID:1a87l4R/0
>>647
繰り返す条件が明確な場合はwhile、終了条件に着目した方が処理の流れがわかりやすい場合はuntil
適切に使い分けると、プログラム全体が読みやすくなって間違いが減る
2020/04/26(日) 19:37:28.36ID:1a87l4R/0
よくない例
While Not 終了条件

適切な例
Until 終了条件
2020/04/26(日) 20:25:45.60ID:IAQJrydO0
>>649

Sub ループwhile()
 Dim i As Long
  i = 1
 Do While Cells(i, 1) <> ""
 Cells(i, 3) = Cells(i, 1) + 10
 i = i + 1
 Loop
 MsgBox i & "回whileでループ"
End Sub

Sub ループuntil()
 Dim i As Long i = 1
 Do Until Cells(i, 1) = ""
 Cells(i, 3) = Cells(i, 1) + 10
  i = i + 1
 Loop    
 MsgBox i & "回untilでループ"
End Sub

なるほど、空白になるまでループってのを練習してました
後者の方が一般的ですかね
勉強になります。
651デフォルトの名無しさん (アウアウエー Sa6a-WAKu)
垢版 |
2020/04/26(日) 21:08:58.39ID:RAbG8RW6a
僕は wihle しか使わない
理由は c言語にないから

あと、なんとなくだけど、wihle と until は混ぜて使わない方がよい気がする

いや、混在する人がいても文句は言わないと思うけど
2020/04/26(日) 21:11:31.65ID:RAbG8RW6a
>>651
651 ですが、
理由は until はc言語にないから
です
すみません
2020/04/26(日) 21:21:03.37ID:wya5Zv+N0
ド・モルガンの法則なんてのを知ってるとループ条件が
劇的に易しく書けるようになったりするよ
2020/04/26(日) 21:43:11.03ID:Whjp3eXS0
>>653
ドモルガンは法則ではなくて公理すなわち前提条件なのでは?
2020/04/26(日) 22:54:36.35ID:1a87l4R/0
Not Is Nothing
英語の否定文って日本語とロジックが違うから直感的にわかりにくい
2020/04/26(日) 23:37:47.73ID:x2OEBIkDa
少なくとも一回実行する必要があるとき until
一回も実行しないかもしれないとき while
2020/04/27(月) 00:02:16.80ID:i1fhLCEO0
まぁ大事なのは自分の中でしっかりルールを固めておくこと
なんとなくで使い分けてると100%デスマに陥る
2020/04/27(月) 00:02:40.85ID:pzY5bj450
>>656
VBAでは、それはDo側に書くかLoop側に書くか

WhileかUntilかはその条件の意味的なもので使い分けるのが本筋だろうけど
書くときの話ならどちらかに統一するルールでも良いと思う
2020/04/27(月) 00:32:05.13ID:7P4A4QOo0
シート1のA1セルにx1、x2、x3と設定し、このx1〜x3をそれぞれx1をB1セルに設定されている値、x2をC2セルに設定されている値に置換するにはどのようにすればよいのでしょうか
Replaceでは検索文字列および置換文字列を一つずつ指定できないため、検索したい文字列が増えるたびに処理が無駄に増えてしまうように思うため効率的なやり方を教えていただきたいです
2020/04/27(月) 03:31:04.69ID:Rq5FZkLb0
もっとわかるように説明してもらわんと
661デフォルトの名無しさん (ワッチョイ ae63-V/Lh)
垢版 |
2020/04/27(月) 04:12:22.78ID:NMjdVbpJ0
置換と言ってるからセル参照ではない事だけわかった
2020/04/27(月) 04:51:42.68ID:o+TU1QYP0
学習能力のないひとがやってきて
説明能力の貧弱さを露呈する場所か・・・
2020/04/27(月) 05:03:04.57ID:Nsh172gi0
>>647
IF文、For文と配列で簡単な処理はこなせる
上級者はまた別のパラダイムで書いているが
先走る必要もなく基礎を確実に身につけよう

>>654
ド・モルガンは定理になることが多いが
そうなるのは公理系しだいだから
名前がおかしいと感じたことはない
664デフォルトの名無しさん (ワッチョイ 6ee6-eHaU)
垢版 |
2020/04/27(月) 06:05:48.59ID:XYadQOO00
>>659
非効率なコードを上げてくれ
2020/04/27(月) 06:24:43.93ID:3fBcsBz5r
>>659
select case
2020/04/27(月) 08:38:39.18ID:MOHWKMXM0
>>659
x3をd3に入れる
置換にこだわらず、代入しなおす
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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