[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/04 15:55 / Filesize : 295 KB / Number-of Response : 1008
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

Excel VBA 質問スレ Part70



1 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 22:08:43.71 ID:jtngtgXU0.net]
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

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

262 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 04:47:34.80 ID:5JzvmzAs0.net]
If Today()="2021/04/17" Then

Range("A1").Interior.Color = 256

〜とか条件加えればいいんじゃね

263 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 05:37:32.98 ID:HGZEZM9x0.net]
こんなこと出来ますか?
https://i.imgur.com/ypZck9P.png
A列に予め色の見本が、C列に数値を代入していく。
C列に数値を代入したら、そのセルの背景色をA列の色の見本と同じ色にしたい。

A列め色の見本は20色ぐらいを想定。
条件付き書式を使おうと思ったけど、20色も増えたらルールも20個書かないといけないので、ちょっとなえた。

264 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:27:08.23 ID:fydw5HpOa.net]
>>261
これを、ワークブックオープンにいれておけばよいよ

265 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:33:53.75 ID:fydw5HpOa.net]
>>262
セルに入力されたらシートチェンジというモジュールがあるはずなので
それをさがしてその中でいろいろな処理をすればよいよ

266 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 06:44:21.86 ID:iZq5P4oj0.net]
>>262
出来る出来ないで聞かれたら出来ると答えるよ。

方法は?と聞かれたらワークシートチェンジイベントをシートモジュールに付け足して、引数にはRangeが入ってくるから
その範囲にC列が被っていたらそこの数字みてA列の該当する数字の色拾って来て着色する。

イベントの範囲とC列が被っているかどうかは計算でも求められるけど、今回はセル値も見ることになるからFor Each でイベントでとったRangeを
ぐーるぐる回してC列かどうかを見ればいいと思うよ。
その際、イベントの引数の範囲もRangeだけど
Eachの後に書くCellに該当する変数の型もRangeになることに気をつけて。
実はCellって型はRangeなんだよ。

267 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:03:20.22 ID:jQb3oNGZ0.net]
>>265
こういう回答する人って知識ひけらかしたいだけに見える
簡潔答えられないのかね

268 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:05:28.63 ID:gHXBJYD60.net]
まあ条件付き書式のほうがスッキリしていいと思うけどな

269 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:19:08.72 ID:iZq5P4oj0.net]
>>266
そうなんだ
最近ヒマしててちょっとひけらかしたい部分もあったんだ。
でも作る時のポイントになること押さえてるからいいだろ?
本当は手元に環境があればソース貼りゃいいんだけど。

270 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:26:58.07 ID:fydw5HpOa.net]
ふつうはシート・チェンジのモジュールのなかで
target.アドレスやtarget.valueで値を取り出すのじゃないのか

なにをやってるのかよくわからんぞ、



271 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:28:09.89 ID:5JzvmzAs0.net]
>>262
どういうシステムにしたいかがいまいち分からん

まずC列の複数のセルに0〜5の整数をまとめていくつも代入して、
その後に数字入れたセルの背景色をまとめて変えたい?

272 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:30:13.57 ID:jQb3oNGZ0.net]
口だけ出すのもなんなので一応作ってみた
Sheet1モジュール用

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Alea数値 As Range
Set Alea数値 = Range("C4:C9")

If Intersect(Target, Alea数値) Is Nothing Then Exit Sub

Dim AleaColor As Range
Set AleaColor = Range("A4:A9")

Dim Rng As Range
Dim Color As Long

For Each Rng In AleaColor
If Rng.Value = Target.Value Then
Color = Rng.Interior.Color
Target.Interior.Color = Color
Exit Sub
End If
Next Rng

End Sub

273 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:46:50.44 ID:fydw5HpOa.net]
>>262
てさあ、なかなか賢いとうか
赤や黄色のセルを取り出す、⬅これできないだよな

どこかのセルと同じ色にするならできるだけど

274 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 07:47:30.68 ID:IoVEY+h40.net]
>>271
素晴らしいです。
やりたいことが出来ました。
コメントくれた人にも感謝します。

275 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:50:15.05 ID:xdZBdiobH.net]
>>271
いま見返したらAreaがAleaになってるな

276 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:56:18.27 ID:fydw5HpOa.net]
エクセルは1600万色もあるからどれが赤で黄色なのかわからない
262のように色見本があって、これが赤です。と決めてくれないと

277 名前:デフォルトの名無しさん [2021/04/17(土) 09:08:47.12 ID:lNzUtf8u0.net]
>275
EXCEL関係ない

278 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 12:35:40.75 .net]
>>102,103
返信ありがとうございます。
input_str =〜 の()内にB2の文字列を貼付して出来ましたが、
input_str =〜
input_str =〜
と複数行にして試しましたが、複数行は出来ませんでした、どうすれば複数行処理可能になりますでしょうか?

279 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 20:38:15.19 ID:A+RmKR4F0.net]
>>258
いや、ムービーメーカー4がわからないから、貰ってもわからないし。

コンボボックスって未選択の所?
UIAutomationじゃなくてもSendMessageで行けそうな気がするけど・・。

▼が何の文字を指定すればいいのかわからないって意味なら、
やっぱりFindAllで取得して、配列の何番目にそれっぽいのが入ってるか調べればいいと思うな。

280 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 20:55:43.60 ID:IoVEY+h40.net]
>>278
1日がかりでググりまくりの苦労と試行で出来た。

'コンボボックスを開いて折りたたむ
Dim ptnExpand As IUIAutomationExpandCollapsePattern
Set ptnExpand = elmYukkuri.GetCurrentPattern(UIA_ExpandCollapsePatternId)
ptnExpand.Expand
ptnExpand.Collapse

'コンボボックスの中身をセルA3に書き出す
Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ListBoxItem")
Set elmsYukkuri = elmYukkuri.FindAll(TreeScope_Children, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "TextBlock")
For i = 0 To elmsYukkuri.Length - 1
Set elmYukkuri = elmsYukkuri.GetElement(i).FindFirst(TreeScope_Children, iCnd)
Cells(i + row_セリフ開始, 1).Value = i
Cells(i + row_セリフ開始, 2).Value = elmYukkuri.CurrentName
Next



281 名前:デフォルトの名無しさん [2021/04/18(日) 09:49:47.16 ID:AhVY6Zxk0.net]


282 名前:デフォルトの名無しさん [2021/04/18(日) 09:56:40.54 ID:AhVY6Zxk0.net]
Private Sub Worksheet_Change(ByVal target As Range)
If Intersect(target, Range("A1:A2")) Is Nothing Then
Exit Sub
End If
ClearDates
UpdateDates
End Sub
Sub ClearDates()
Range("A4:A999").Clear
End Sub
Sub UpdateDates()
If IsDate(Range("A1").Value) = False Or IsDate(Range("A2").Value) = False Then
MsgBox "日付を正しく入力してください"
Exit Sub
End If
Dim d As Date, endDate As Date
d = Range("A1").Value
endDate = Range("A2").Value
Dim y As Long
y = 4
Do While d <= Range("A2").Value
Cells(y, 1) = d
d = d + 1
y = y + 1
Loop
End Sub
日付間の日にちが自動で打ちあがるようにしたんですけど
めちゃくちゃ重くてパソコンが固まってしまいますご教授ください
素人みたいな質問ですいません。

283 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 10:09:03.12 ID:CdbHG8Q+0.net]
>>281
Changeイベントをする時は、
処理の前で
Application.EnableEvents=False

処理の後で
Application.EnableEvents=True

が動くようにしないと延々Changeイベントが動いて重くなる

284 名前:デフォルトの名無しさん [2021/04/18(日) 10:09:19.29 ID:a83COmqy0.net]
>>281
むしろそれでプロだったらびびるけど・・・

Worksheet_Change()はワークシートの内容が変わった時に発火する

Worksheet_Change()→ClearDates()→Worksheet_Change()→UpdateDates()→Worksheet_Change()→・・・
多分無限ループになっている

こういう時はイベントを無効にしておけば無限ループにならない

Private Sub Worksheet_Change(ByVal target As Range)
object.EnableEvents = false
'内容
object.EnableEvents = true
endsub

285 名前:デフォルトの名無しさん [2021/04/18(日) 10:09:41.04 ID:a83COmqy0.net]
すまん、Application.EnableEvents = Falseだった上に遅かった

286 名前:デフォルトの名無しさん [2021/04/18(日) 10:53:16.67 ID:AhVY6Zxk0.net]
すばやい返答ありがとうございます
少し早くてびっくり

VBAははじめて2年ぐらいです
5年後ぐらいにプロになれたらいいな

Private Sub Worksheet_Change(ByVal target As Range)
object.EnableEvents = false
上記を先頭2行と置き換えて

object.EnableEvents = true
endsub
↑この2行は最終行に書けばいいのですか?

素人ですいません!

287 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 11:21:49.65 ID:JCpiu5BAH.net]
>>285
直す部分だけ書くと、こう

Private Sub Worksheet_Change(ByVal target As Range)
  Application.EnableEvents = False
  If Intersect(target, Range("A1:A2")) Is Nothing Then
    Exit Sub
  End If
  ClearDates
  UpdateDates
  Application.EnableEvents = True
End Sub

288 名前:デフォルトの名無しさん [2021/04/18(日) 12:11:13.84 ID:ORj5XeNB0.net]
>>285
ごめーん、object.EnableEvents = false  は間違いです
>>286さんが正しいです

289 名前:デフォルトの名無しさん [2021/04/18(日) 14:57:21.70 ID:AhVY6Zxk0.net]
先生たちありがとうございます!
新設丁寧頭もいい

290 名前:デフォルトの名無しさん [2021/04/18(日) 14:58:49.68 ID:AhVY6Zxk0.net]
自分の力で解決できるようにがんばります!



291 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 16:07:16.06 ID:c/Nu40gb0.net]
>>281
それコピペして動かしてみたけど全然重くなかったよ
1900年から今日までにしても4秒くらい
これで固まるのは別の原因があると思う

その場所以外にとても複雑な計算式があって
Cells(y, 1) = d の度に計算して重くなってるとか

そうであれば計算を手動に変えて最後に自動にするとか
セルじゃなくて配列にdを入れて最後に一回だけ出力するとか

UpdateDates()を1行ずつ動かせばどの行で固まってるか分かると思うよ

292 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 16:21:48.14 ID:n1x9QJALa.net]
>>290
それはChangeイベントで検証しましたか?

293 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 19:37:56.63 ID:Z7m7Dr1xd.net]
>>261
ありがとうございます。試してみます。

294 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 20:47:27.38 ID:c/Nu40gb0.net]
>>291
検証しました。
対象セルの書き換えはないから普通は無限ループにならないと思うけど
環境によって何か違うのかな?

とにかく一行ずつ動かしてどこで固まるか調べた方がいいと思います。

295 名前:デフォルトの名無しさん mailto:sage [2021/04/18(日) 23:15:06.97 ID:FAQ+sCCd0.net]
https://i.imgur.com/8OFf7Pv.jpg

B4:E6を画像として出力したいんだけど、Rangeの範囲指定をどういじっても、B3:E6が出力されてしまう。
B4:C6を指定してもB3:E6が出力されてしまう。
どうすればいいの?

296 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 00:55:03.43 ID:BhG1xyLeH.net]
>>294
CurrentRegionを使わない

297 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 01:56:46.57 ID:/e3Iiylf0.net]
>>295
thx
CurrentRegionとったらあっさり出来たわ。
たまたまググって出てきたサンプルが説明もなくCurrentRegionを使ってて、
それを参考にしたから数時間損したわ。

298 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:20:37.00 ID:gkbaJTWH0.net]
Name As でExcel以外のJpegファイル等のファイル名を変えることができると思いますが、そもそもなんでEXCELで他のソフトウェアのファイル名変えられるんでしょ?
便利だからいいんですけど

299 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:27:18.04 ID:BhG1xyLeH.net]
>>297
ファイル操作はOSの基本機能の一つだから
逆に制限する方が、作るのも使うのも面倒になってメリットがなさすぎるという設計上の理由

300 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 10:41:44.29 ID:gkbaJTWH0.net]
そっか、OSを操作してるんでしたね
EXCELもOSも同じメーカーだからこそできる技なんですな



301 名前:デフォルトの名無しさん [2021/04/19(月) 21:03:08.15 ID:K5RFczke0.net]
>>299
馬鹿?

302 名前:デフォルトの名無しさん [2021/04/19(月) 21:19:11.87 ID:80cIHSk1M.net]
>>299
知能に問題がある人かな

303 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 21:54:25.72 ID:zOv5i/QS0.net]
昔のExcelは非公開API使ってたとか噂を聞いたことがある

304 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 23:09:31.11 ID:Qr9ctU7Wa.net]
噂を信じるな

305 名前:デフォルトの名無しさん mailto:sage [2021/04/19(月) 23:15:55.48 ID:NSiRzHFAa.net]
なつかしいなぁ 90年から2000年ぐらいの頃だな

306 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 00:42:55.05 ID:LQ8i77JG0.net]
あるシートをコピーした時、
「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’○○○’が含まれています。この名前を使用しますか?」
が延々と出てくるのがうざいので、
メッセージを出さないようにするマクロって作れますか?

事前に名前の定義から削除するのではなく、シートをコピーしたら、メッセージを出さずに名前の定義を削除したいです。
詳しい方、ご教示をよろしくお願いいたします。

307 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 01:37:22.55 ID:ptbZPsIm0.net]
書式設定をコピーしなくて良いなら配列に値を代入して新しいシートに貼り付けが楽じゃない?
書式もって言うなら出力後に書式だけコピーしてやるとか

308 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:08:37.93 ID:j3U7nYtJ0.net]
VBAで隠蔽使ってる人はどんな時に使ってますか?
ぶっちゃけPropertyGetだけでいい気がしてきてしまったので、適切な使い所を知りたいです

309 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:20:28.94 ID:LQ8i77JG0.net]
>>306
なるほどです!
やってみます、ありがとうございます!

310 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 07:26:26.47 ID:sns0znWgd.net]
>>307
二人以上で開発する時、または長期に渡るメンテが必要になりそうな時



311 名前:デフォルトの名無しさん [2021/04/20(火) 07:29:11.43 ID:aQV8TqKv0.net]
>>307
基本privateにしておいたほうが色々とトラブルが少ないけど、
特に不満を感じてないならpublicでもどっちでも同じだと思う

privateで意味が出てくるのは大規模・多人数開発だ

312 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:11:30.20 ID:fqIzsxE3p.net]
>>307
メッセージングを行う際にて不必要と思われるメソッド(関数)や変数、プロパティは隠蔽する。

313 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:18:15.46 ID:fqIzsxE3p.net]
いや?
そもそも変数はプロパティかメソッド(関数)の引数や戻り値でしか受け渡ししないから変数は隠蔽しないことは無いか

314 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 12:27:20.11 ID:WjARqIhg0.net]
>>307
ぶっちゃけPropertyGetだけでいいです、他のことはやらなくていいです

315 名前:デフォルトの名無しさん [2021/04/20(火) 18:45:51.60 ID:aQV8TqKv0.net]
変数を隠蔽しておけばgetter・setterを必ず通るからそこさえ監視しておけば後を追える
変数丸出しだとどこから触られるかわからないのでデバッグが死ぬほど大変になる

316 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 19:02:40.74 ID:grfVULwwa.net]
みんなが使うのはパブリック
自分だけで使いたいときはプライベート

XとかY,Zなんかはプライベートにしましょう

317 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 19:16:00.04 ID:grfVULwwa.net]
たんじゅんに
プライベートなら3文字以下
パブリックは5文字以上
そう決めておけばよいよ

318 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 20:06:43.69 ID:f6iXtgoua.net]
>>314
デバッグなんかやんないくせに

319 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:17:43.05 ID:teqpRJSw0.net]
人の書いたコードなんて読めない
自分で書いても1ヶ月後には読めない

320 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:32:16.88 ID:N2s7rCY20.net]
>>318
人が書いたコードは兎も角
自分の書いたコードが読めないのはちょっとね

上からつらつらと書くんじゃなくて
小さな部品から作って
組み合わせて大きな部品を作って
更に組み合わせて・・・みたいに書くと
分かり易いコードを書けるよ

逆に誰が読んでも分かり易いコードが
書けるようになったらもうすぐVBA卒業だよ



321 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:33:10.03 ID:grfVULwwa.net]
文章のきほんは5w1H

322 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 00:03:03.35 ID:VYKRrHWq0.net]
現場のためにマクロ作ってて
性能確認は現場に投げてるけど
どういう処理をしてるとか一切考慮してなくて正常な処理をバグ言われてちょっと辛い
わかる人いる?

323 名前:デフォルトの名無しさん [2021/04/21(水) 00:28:41.53 ID:mZ1GtAH60.net]
わかる。仕様も確定できない馬鹿だと。

324 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 00:48:54.24 ID:VYKRrHWq0.net]
すごく突っ込みたいけどかなーり年上のおじいちゃんばっかでちょっと言いづらかったり
ありがとう、ちょっと楽になった
明日ガツンと言ってやる(笑)

325 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 02:31:17.44 ID:QPNAyMuU0.net]
>>321
わからんな
コミュニケーション不足なだけだろ

326 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 04:00:51.54 ID:KhV9jsbh0.net]
正常な処理なら伝えりゃいいだけだろ
MsgBox出すなり、シートに書いとくなり、口で言うなりして

327 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 11:09:16.06 ID:aZ4kV5qwa.net]
わからんものを説明するときは5w1hでよいから
聞いているほうも分かった気になる

328 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 12:00:56.40 ID:TWzI1JIsM.net]
エラーメッセージ出そうが絵本みたいなマニュアル作ろうが「ちゃんと動かないぞ!ポンコツめ!」って騒ぐオヤジがおる。んでよくよく聞いてみたらメッセージは読まずに閉じるわマニュアルは開くことすらしてねぇわ日付入力しろって書いてある項目に「多分5/10」とか書いてくれちゃうわであぁ何やっても無駄な時は無駄なんだなぁってなった事が何度もある

329 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 12:37:02.29 ID:BXHy+8up0.net]
>>327
直接お客さんとやり取りしてるの?
そうで無ければ上司か島のリーダーさんに
中間に入ってもらえば?

もし直接お客さんとやり取りしているなら
そもそもプログラマーとお客さんが
窓口も介さず直接やり取りを行う
形態自体に問題があると思うけど
リーダーさんとか上司に相談するべき

もっとも、自分がその窓口ですと言うのなら
最初っからどこをどうして欲しいか
よーく聞いてから作る方がいい。
どうせ用件定義書なんて存在して
いないんでしょ?

330 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 14:00:48.01 ID:aZ4kV5qwa.net]
おいおい、エクセルのマクロぐらいで定義書はつくらんだろ

ふつうはマクロができてからしようが決まるから



331 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 17:35:07.95 ID:Gd/0Jck0M.net]
>>327
さすがにIsDateくらい使おうぜ

332 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 17:53:28.95 ID:k6MIIAN/r.net]
年配のジジイ騙して金取れるなら今の体制維持も考慮すべき

333 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 18:25:58.81 ID:2kwhHx0qM.net]
>>328
上司に頼まれて作った子会社の人達の作業進捗を確認する為のスケジュール管理ツールなんだ
今まで手書きでやってたのを電子化したかったんだと
要求仕様の箇条書きを渡されて好きに作っていいって言われたから仕様書とかコーディング規約とか諸々自分で用意した
まぁ流石に向こうの課長さんから当事者のおっちゃんに雷落ちたらしいが

>>330
流石に動作前に入力のエラーチェックはかけてるさ
それでlsDateでチェックして日付じゃなけりゃ処理を停止して「No.〇〇の工程の開始予定日が日付じゃねぇから書き直せ」って類のメッセージ出してるんだがメッセージ読んでねぇから「マトモに動かないポンコツツール」って喚き散らしてたんよ

334 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 19:16:43.30 ID:aZ4kV5qwa.net]
中抜きの現場をそのまま見ているような

人の入力チェックはけっこうノウハウいるのね

335 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 19:18:54.99 ID:aZ4kV5qwa.net]
進捗管理ツールてまともな奴はみたことがない

336 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 20:16:57.95 ID:ukt/rEUCa.net]
文句いわれた程度で逆ギレかやっぱゆとりだな

337 名前:デフォルトの名無しさん [2021/04/21(水) 20:18:22.64 ID:mZ1GtAH60.net]
>>332
やっぱり馬鹿か

338 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 21:08:21.14 ID:BXHy+8up0.net]
>>332
なるほど大体状況は理解出来た
まぁボロくそに言ってたおっちゃんもおっちゃんだけど、果たして君の作ったツールは
今まで手書きでやってた人がいきなりパソコン使って打ち込めるような優しい設計になっていたのかな?

下請けでしかもスケジューラー作成なんて自由度の高いものを上司が君に振ったのはひょっとしたらその辺の事も兼ねて
君が今回それを通してどんなことを学ぶかを見ていた可能性があるね。

そのおっちゃんはボロくそに言ったかも知れないけどそれが現場で作業している人の正直な意見であることには間違いないよ。厳しいかも知れないけどね。

339 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 07:33:17.38 ID:7heM3Ej5M.net]
まあVBAじゃなくとも自分が便利だと思っている価値観を人に理解してもらうのは難しい

340 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 09:34:46.13 ID:gwtiqwMsM.net]
>>329
仕様書はどういう形式で作るかによる
マクロも仕様書に載せるとルール付けしたら必要になる



341 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 12:44:53.98 ID:hcaPQHcf0.net]
自分の給料がどこから来るのかを考えれば適当な対応はできないとおもうが

342 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 17:31:38.77 ID:voAAUW4i0.net]
VBAでは非0は真として扱われるということでいいですか?

343 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 17:54:34.03 ID:aG329xgw0.net]
>>341
型による

344 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:05:18.29 ID:voAAUW4i0.net]
>>342
整数です

345 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:08:01.13 ID:voAAUW4i0.net]
あーけど
エラー値も判定の対象になるかもです

346 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:25:55.35 ID:voAAUW4i0.net]
ごめんなさい回りくどい質問せずに
直球で質問すると
if instr(str1,str2)>0 then
の>0って要らなくないか?ってことです

347 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:47:47.49 ID:aG329xgw0.net]
>>345
やめとけ。まずInstrで何が返ってくるのか確認するんだ
officetanaka.net/excel/vba/function/instr.htm

NULLが入って来ることもあるからLEN関数で囲む感じになるのか?
どちらにしても可読性が落ちるようなものやトリッキーなことはなるべく避けた方がいい
そんなこと全般に渡ってやってたら
1月後には自分が作ったソースが読めなくなるぞ

348 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 19:10:26.59 ID:+FKRqhM4a.net]
うむ
理系のひとはなんでも yes/Noで考えががちだけと
そういう論理式はむつかしい
現実にはyes/No/無回答 /cancelの4値だから

それに否定<>もあまり多用しないほうがよい
A<>false or B<>false or C<>false
こういうのわけわからんから

IF A=true and B=true and C=true then
else
×××××××
ENDIF
こうしておく、終電に間に合うぞ

349 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 19:52:34.43 ID:UidQzhn6H.net]
>>347
演算子や論理式は、何を判定したいかに合わせて使い分けろ
そしてコメントを書け

350 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 21:01:52.31 ID:hn+92ycNd.net]
理系文系家系関係あるかそれ



351 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:02:56.56 ID:vfns6Sdda.net]
VBAでは問題ないのだろうけど、TRUE をイコールで判定するのはどうも…

352 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:11:41.16 ID:voAAUW4i0.net]
ありがとうございます
素直に省略せずに比較演算子を使うことにします

353 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 01:03:06.83 ID:ftZ+9Vdga.net]
>>349
体育会

354 名前:系もついか []
[ここ壊れてます]

355 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 04:16:22.24 ID:IAv7U8Ah0.net]
>>350
そうだね
まぁそういうときによく話に上がるコードだけども

Dim A As Boolean
Dim B As Boolean
Dim C As Boolean

A = False
B = False
C = False

A = B = C

こんなコードがあったとして
VBAではこれはエラーにならない

慣れてる人ならAにTrueが入ることが
すぐ分かるけど
慣れていない人はAにFalseが入ると
思ってしまうこともある

単純な式だから「そんなバカいねーよ」と
思うかも知れないけど
これを複雑な式に混ぜられた場合を考えると
結構キツいことになったりもするよ

356 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:12:18.96 ID:Rqoeq7ma0.net]
話の主旨が分からん
代入じゃないんだから「==」にしたいって話?
それならBooleanは関係ないよな…

357 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:41:22.55 ID:IAv7U8Ah0.net]
>>354
すまん。
最初Integerで書こうかなとも思ったんだけど
それだと本当にエラーにならないか自信がなかったんだ。

358 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:51:27.06 ID:IAv7U8Ah0.net]
手前側のイコールが代入で後ろのイコールが比較演算子だから他の言語だと
A = B == C;
みたいな書き方になったりするのかな
ただVBAではどっちもイコールひとつで分かり辛いから、その辺ちゃんと分かるように書いた方がいいよと言うのが話の趣旨だね

359 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:24:58.47 ID:TaQs1RgsH.net]
それは文法の話であって論理(式)の話ではないな
途中で混ざってすり変わってる

360 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:27:12.51 ID:P8K+Jhr50.net]




361 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:40:22.74 ID:TaQs1RgsH.net]
a=b=cがすべて代入になる言語もあるからややこしいって話だと思うけど
手を抜かずに式を分けたりカッコを付ければいいだけ
コメントを書いたり変数名をわかりやすくするのと同列で、ミスを減らす工夫はプログラマーの義務
すべて代入したい時
b=c
a=b
比較したい時
a=(b=c)

362 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 07:36:07.75 ID:F+E5VVCoa.net]
プログラム上の論理式は2値論理がほとんどだから
じっさいは仕様によっていくらでも沢山あるからあるから
そういうのは丁寧にコメントをいくしかない






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

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

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