Excel VBA 質問スレ Part66at TECH
Excel VBA 質問スレ Part66 - 暇つぶし2ch400:379
20/05/30 18:40:42.91 x6N4SK2n.net
=TEXT(
EDATE(DE2,
(DAY(DE2)>20)+(DT2<>""))
,"yyyy""_""m")
の並び順で
For cnt = 2 To i
Range("HJ1") =
Format( _'「=TEXT(」にあたる部分
**********'「EDATE(DE2,」EDATEにあたる部分
'「(DAY(DE2)>20)+(DT2<>""))」にあたる部分
DateSerial(Range("DE" & cnt) > 20 + (Range("DT" & cnt) <> "") 
,"yyyy""_""m" '「,"yyyy""_""m")」にあたる部分
Next cnt

401:デフォルトの名無しさん
20/05/30 18:59:33.29 IeNY1P6O.net
>>367
それ本当にマクロか?っていう圧倒的なものを作ってみるといい。

402:デフォルトの名無しさん
20/05/30 19:06:40 RuztwjMU.net
>>383
ユーザーフォームのボタンにあてがうと
有り難みが薄れるらしく
最近作るのを断ってるわ

403:デフォルトの名無しさん
20/05/30 19:52:23 NW87G0lL.net
どんだけ人間小さくて承認欲求高いんだよ…

404:デフォルトの名無しさん
20/05/30 20:13:00 v+h7hopE.net
>>367
マクロ記録でできるレベルじゃないから苛ついてんの?できるんなら言われても仕方ないだろ
ソフト屋じゃなけりゃ再利用とか考えるわけないし

405:デフォルトの名無しさん
20/05/30 20:39:02.93 x6N4SK2n.net
>>381
京都のアニメ制作会社に放火とかしそうだなw

406:デフォルトの名無しさん
20/05/30 21:05:02 n48qxrxQ.net
>>372
逆に「VBAができるわたし」は
ExcelやWordの複雑な機能のことに異常に詳しいと思われてて
難解な作業を仕事で依頼される。
それをVBAで解決できるかできないかにかかわらず。

407:デフォルトの名無しさん
20/05/30 21:08:47.70 A129boaw.net
そういう事を防ぐために能鷹隠爪で

408:デフォルトの名無しさん
20/05/30 21:10:58.46 n48qxrxQ.net
>>364
これはなにで動いているのですか?

409:デフォルトの名無しさん
20/05/30 21:14:47 49ARh1d+.net
>>388
仕事で依頼されたなら、仕事やれよ

410:デフォルトの名無しさん
20/05/30 21:45:04 /9v+/+fv.net
>>382

式が何をしようとしているのか不明。
・何でHJ1(1行目)で2行目の値を評価しているの?
・20日以降は次月として捉えているように見えるけどDT列には何が入るの?
 空じゃなければ更に月を進める?

Forの使い方という点にコメント
これだけじゃ cnt がどこまで回ればよいかわからんよね。たとえば、
 i = 30
For cnt 2 To i
とするか、
For cnt 2 To 30
とかす


411:れば、Loopはする。 でも書き込むセルが Range("HJ1") に固定されてるから、これじゃ同じセルに 30回、延々と上書きするだけになる。 書き込み先を動的に変える場合は、範囲Objectは Range("番地")じゃなくて、 Cells(行番号、列番号)を使うといい。この中でcntを使えば。 EDATE関数にあたるVBA関数はDateAdd TEXT関数はFormatでOK。



412:デフォルトの名無しさん
20/05/30 21:53:02 IeNY1P6O.net
>ExcelやWordの複雑な機能のことに異常に詳しいと思われてて

ありがちな誤解だよな。
プログラムがわかるから細かい機能を知らなくてもどうにか出来るわけで、

413:デフォルトの名無しさん
20/05/30 21:53:27 IeNY1P6O.net
Word、Excelの専門家じゃないってのに。

414:デフォルトの名無しさん
20/05/30 22:38:43.08 I7l9umXM.net
wordの複雑な機能って?

415:デフォルトの名無しさん
20/05/30 23:40:16 JE+7y9de.net
フィールドとか?

416:デフォルトの名無しさん
20/05/31 01:07:44 0lS4xVrw.net
WordVBAとか

417:デフォルトの名無しさん
20/05/31 01:47:47 6kaO8G32.net
初歩的ですみませんが、sub ()の()の中に文字列が入ることありますか?
買った教本の例題にこの中に文字列が書かれてるのが一つだけあるんですが、おそらくそのせいでマクロが動きません

418:デフォルトの名無しさん
20/05/31 02:38:20 2V+gQfrN.net
>>398
理解できない奴には無理

419:デフォルトの名無しさん
20/05/31 02:39:52 86R8wtw/.net
>>391
なんでわたしだけ仕事が増えるんだ
この馬鹿モンが!

420:デフォルトの名無しさん
20/05/31 02:41:39.96 86R8wtw/.net
しかも周りに座ってるような同僚は
わたしより仕事スピードが1/2~1/10の人たちばかりなのに。

421:デフォルトの名無しさん
20/05/31 02:50:27.87 0yzq8zA/.net
>>398
subプロシージャで調べてみ

422:デフォルトの名無しさん
20/05/31 02:50:46.87 6kaO8G32.net
>>399
理解できるように勉強してるので教えてください
図々しいと思いますが

423:デフォルトの名無しさん
20/05/31 02:51:03.70 6kaO8G32.net
>>402
調べてみます!

424:デフォルトの名無しさん
20/05/31 02:52:54 wkpADETk.net
>>401
じゃあ転職しろよw

425:デフォルトの名無しさん
20/05/31 02:56:41.46 2V+gQfrN.net
>>403
この段階でわからないこと自体無理なんだよ
仕組みを理解しなければ無理
公式だけ暗記して終わりの馬鹿には無理なんだよ

426:デフォルトの名無しさん
20/05/31 03:25:44.77 C8J9R7KI.net
>>375
ありがとう
でもだめだったわ

427:デフォルトの名無しさん
20/05/31 03:27:49.96 C8J9R7KI.net
>>403
VBA 引数
 
でぐぐる

428:蟻人間 ◆T6xkBnTXz7B0
20/05/31 04:00:28 KExNe49d.net
エクセルにはリファレンスマニュアルが付属していて、追加でインストールするとF1ヘルプで言語仕様まで見られる。
マニュアルがパソコンに入ってなかったら、管理者からエクセルのシーディーを借りてね。

429:デフォルトの名無しさん
20/05/31 05:00:56.16 pJwiV8F0.net
>>398
sub() って文法的に作れないはず
マクロが動かないのは文字列のせいじゃないかもよ

430:デフォルトの名無しさん
20/05/31 08:40:31 6kaO8G32.net
ごめんなさい
sub test ()でした

431:デフォルトの名無しさん
20/05/31 08:57:53.05 C8J9R7KI.net
Sub Test0001()
 Dim i As Integer
 
 For i = 1 To 2
  Dim ary()
  
  MsgBox "ここにブレークポイント設定"
  
  ary = Sheet1.Range(Cells(1, i), Cells(5, i))
 Next i
End Sub

A列とB列にあるいずれも5行目までの値を配列に取得するだけのプログラム
For中の一回転目はA列、2回転目はB列
こうやってForの中でaryを宣言し直せば、aryは初期化されると思い込んでたんだけどダメなのな
2回目にMsgBoxで止まったときにaryみるとA列のデータがaryに残ってしまってる
これってメモリ上に残ってて同じ所を参照し直すからなのかな
Eraseすれば消えるからいいんだけど、気づくのに時間かかったわ
こんな初歩的なこと分かってないでよく今まで組んできた


432:もんだ



433:デフォルトの名無しさん
20/05/31 09:44:52 8XtoheO9.net
すんません今時ブロックスコープない方がアレなんで

434:デフォルトの名無しさん
20/05/31 09:49:53 4iioSPSZ.net
>>398
それはLEFT()が動かないのと同じ理屈。
普通LEFT(A1,5)とか書くから。

435:デフォルトの名無しさん
20/05/31 10:44:01.62 GCI/GpSg.net
>>412
そういう動作を知るためのテストなんじゃね
残っていても上書きされるんだから問題ないし

436:デフォルトの名無しさん
20/05/31 10:47:02.74 GCI/GpSg.net
>>411
sub test("文字列")
ってことか?

437:デフォルトの名無しさん
20/05/31 11:53:35 df9CBrpd.net
>>398
呼び出し元とプロシージャそれぞれ一行ずつ書いてくれよ

438:デフォルトの名無しさん
20/05/31 12:34:25 GcFwCYXw.net
>>412
VBAのDimは書いた場所に関係なく、コード開始時に1回だけ実行される仕様
モジュールの最後に書いても結果は変わらない
Sub Test()
  Dim a()
  For i = 0 To 9
    Dim b()
  Next
  Dim c()
End Sub

439:デフォルトの名無しさん
20/05/31 12:42:20 C8J9R7KI.net
>>413
あーなるほど
そこを考えるんですか、勉強になりましたわ
ただ、改めて疑問に思ったのは、同じブロックスコープ内で再度宣言してもエラーでないのはどういうことなんだろーとか
Forの中での宣言だと繰り返しといっても宣言部分は無視されるってことかな
ま、同じ事しないようにちゃんとおぼえておこ・・・

>>415
このプログラムだとそうなんだけど
ary = Sheet1.Range(Cells(1, i), Cells(5, i))
この部分が、ある条件を満たした場合のみ代入するっていうコードだとします
んで、条件満たさなかった場合には代入されないため、A列のデータがaryに残っちゃっておかしな事になっちゃってたわけですよ
自分で実際に組んでるコードはも少し複雑なものなので

440:デフォルトの名無しさん
20/05/31 12:44:02 C8J9R7KI.net
>>418
ありがとうございます
全然知らなかったです
ちょい調べてみます

441:デフォルトの名無しさん
20/05/31 13:55:17.54 W/GxV3g0.net
>>401
お前は周りにない知識が多少あることに優越感持ってるだけで仕事できる人間の言い分に見えんのよなぁ

442:デフォルトの名無しさん
20/05/31 14:13:51 GcFwCYXw.net
仕事ができる人なら、コードを書くのに何人時かかりますっていう見積もりをざっくりでいいから依頼主にちゃんと提示する
それで依頼を取り下げるかどうかはクライアントの決めること
想定外のトラブルで納期が遅れそうならホウ・レン・ソウして迷惑をかけないようにする

難しいからって愚痴るのはまったく建設的じゃないし、なんの解決にもならない

443:デフォルトの名無しさん
20/05/31 15:00:37 py7qoVDy.net
なんでそんなにかかるの?
どこに時間かかる要素があるの?
やればいいだけでしょ?
○○さんはもっと早かったよ?
次の仕事があるんならそれでいいよ?

444:デフォルトの名無しさん
20/05/31 15:05:53 ztYbO9r8.net
報連相つらいよね…プログラムの難しさよりも報連相の方がつらい…

445:デフォルトの名無しさん
20/05/31 16:55:11 uJxLAScO.net
すみませんド素人ですがご教授下さい。

「あるセルを選択して実行すると選択したセル行のA~D列以外が全て1.1倍される」
というマクロを組みたいです。
ネットで調べて少し作ろうとしてみましたが
知識がありません。

Sub 倍掛け()
Dim SELU As Range '変数名の絶望的センス名
For Each SELU In Selection
SELU.Value = SELU.Value * 1.1
Next SELU
End Sub

Sub 選択したセルの行全選択()
ActiveCell.EntireRow.Select
End Sub

この2つのプロシージャが何となく使えるのかすらわからないのですが試行錯誤しています。
A~D列を除外というやり方もわかりません。

すみませんが


446:教えていただけないでしょうか。



447:蟻人間 ◆T6xkBnTXz7B0
20/05/31 17:39:48 w6MuXuh+.net
>>425
Excel for Windows 95で動作確認。

Sub Record1()
Application.Worksheets(1).Select
For I = 5 To 20
For J = 1 To 20
Cells(J, I).Select
ActiveCell.FormulaR1C1 = Val(ActiveCell.FormulaR1C1) * 1.1
Next J
Next
End Sub

448:蟻人間 ◆T6xkBnTXz7B0
20/05/31 17:50:31 w6MuXuh+.net
>>426 「To 20」のところは適当に変更してね。

449:デフォルトの名無しさん
20/05/31 18:34:56.03 Gn3uBA4V.net
>>425
選択した範囲が処理の起点なので、、
  Dim r As Range
  For Each r In Selection
    If r.colunm < 5 Then GoTo nextLoop
    If r.Value = "" Then GoTo nextLoop
    r.Value = r.Value * 1.1
nextLoop:
  Next
こんな感じ?
行全体を対象にしたいみたいだけど、その時はFor文の前に
  Selection.EntireRow.Select
を差し込めばいい。
1万列処理されるけど、、、

450:デフォルトの名無しさん
20/05/31 18:39:34 Gn3uBA4V.net
>>428
綴りを間違っとった
    If r.Column < 5 Then GoTo nextLoop

文字列セルを避けたければ、、以下も追加
    If Not IsNumeric(r.Value) Then GoTo nextLoop

451:デフォルトの名無しさん
20/05/31 19:13:07.80 4iioSPSZ.net
>>424
ああつらい。
上司がメール読まないタイプだと特に。

452:デフォルトの名無しさん
20/05/31 21:17:59.30 yITbq02Q.net
馬鹿に馬鹿が答えて滅茶苦茶
簡単な質問だとしゃしゃり出てくるからおかしくなる

453:デフォルトの名無しさん
20/05/31 22:48:28.20 6kaO8G32.net
>>416
そうです!!
カッコ内に文字列です!

454:デフォルトの名無しさん
20/05/31 22:49:04.73 6kaO8G32.net
>>417
呼び出し元…すみません、知識不足でした…

455:デフォルトの名無しさん
20/05/31 23:06:33.42 2V+gQfrN.net
>>433
馬鹿には無理だと悟れよ、馬鹿

456:デフォルトの名無しさん
20/06/01 18:21:12.15 JWhdLJJl.net
お前もだ

457:デフォルトの名無しさん
20/06/01 18:38:31 4Uk/Vywe.net
異動した先輩が作ったマクロに少し追加しようと思って標準モジュール見てみたら
乱れ雪月花
地ずり残月
かすみ二段
パリィ
何これ???と思ったらゲームの技名なのか
見事なプロシージャだけど関連性が全くわからんかった…

458:デフォルトの名無しさん
20/06/01 18:48:48 jizMt7mj.net
Sub 乱れ雪月花
  風雪即意付け
  月影の太刀
  三花仙
End Sub

459:デフォルトの名無しさん
20/06/01 19:40:30 o1fpUPSE.net
取り敢えずマジックナンバーだらけのを保守しろとかいうのはやめてー
セル参照も起点ぐらいは定数宣言しといて欲しい

460:デフォルトの名無しさん
20/06/01 19:48:00 xzpno8fJ.net
1列目の2行目から下にEXCELファイル名があります。(同一ファイル名あり)
それらを全て開く、処理、閉じるを繰り返すと時間がかかるので、同一ファイル名は一度だけ開いて閉じるをやりたいのですがどしたらいいですか?

1列目をソート
Do until 1列目
 ???
  処理

loop

ファイル名は数字(000001.xlsなどで桁数は同じ)
???の所で開くor閉じるをやりたいのですがどうしたらいいですか?

461:デフォルトの名無しさん
20/06/01 20:00:55.95 Ct20WAoS.net
パリィは草

462:デフォルトの名無しさん
20/06/01 20:10:21 MDu2hpC8.net
>>439
ひとつ上のセルが同じファイル名なら
なにもせず次へ

463:デフォルトの名無しさん
20/06/01 20:42:10 eRBcTATy.net
重複禁止の処理は連想配列(VBAだとDictionaryオブジェクト)を使うと便利だよ。

既に連想配列に存在するなら何もしない、存在しないなら処理して連想配列に登録する。
Valueに結果を入れておいて、実行結果をシートに出力とかするとカッコイイよ。

464:デフォルトの名無しさん
20/06/01 21:05:54 Otvtnefa.net
結果をシートに出すなら配列使わんと重複削除して�


465:ゥら開いた方が速くて楽じゃん



466:デフォルトの名無しさん
20/06/01 23:34:24 5NIHbXOS.net
まだ22歳の学生社長が得た、23億円の「使い道」
あの橋本環奈をCMに使うバイトアプリの雄
URLリンク(toyokeizai.net)
中学時代の車いす生活から、17歳で起業するまで
URLリンク(www.advertimes.com)
ミャンマー発 AIダイニングアプリ「Yathar」をしかける日本人起業家
URLリンク(roboteer-tokyo.com)
自分の視野は「世の中の0.001%」と自覚せよ。ビジネスチャンスを掴む4つの習慣
URLリンク(headlines.yahoo.co.jp)
アプリの視聴率がわかる 高専卒起業家の独創力
URLリンク(www.nikkei.com)
1万人の若者を支援!インターンが日本を変えるかも!? glowshipの若き創業者・足立卓也氏インタビュー
URLリンク(sogyotecho.jp)
大学生起業家が設立1年で20億円調達! 単発バイトアプリに外食企業など出資【タイミー】
URLリンク(foodfun.jp)

467:デフォルトの名無しさん
20/06/02 00:29:20 hEtyTtKQ.net
俺ならこうかな。

Sub サンペイグッドカメラ()
 どっきりカメラのキシフォート
 カメラのドイ
End Sub

468:デフォルトの名無しさん
20/06/02 00:35:26 0adtr6kX.net
VBAだしそういう名前面白いかもなw
簡単だけど保守したくないやつは、もう先輩や同僚の連絡先を名前にしようかな

469:デフォルトの名無しさん
20/06/02 01:36:20.19 rfJHDu9M.net
Sub 馬鹿専用()
馬鹿には無理()
馬鹿は帰れ()
End Sub

470:デフォルトの名無しさん
20/06/02 02:01:31.67 cr7Q5ahz.net
Sub 鱸()
鰯()
鰹()
鮪()
End Sub

471:デフォルトの名無しさん
20/06/02 02:07:31.79 SOkkDiQ6.net
>>439
Ruby なら重複要素を許さない、集合を使って、
require 'set'
filenames = <<"EOT"
a/foo.txt
a/bar.txt
a/foo.txt
EOT
set = Set.new
filenames.each_line do |filename| # 1行ずつ処理する
filename.chomp! # 末尾の改行を削除する
# 同じ要素は追加できないので、追加できた時だけ、そのファイルを読み込む
p File.read( filename ) if set.add?( filename )
end

472:デフォルトの名無しさん
20/06/02 02:24:02 cr7Q5ahz.net
>>439
[データ]→[重複の削除] って機能あるけど

473:デフォルトの名無しさん
20/06/02 04:12:46 xDFjMRpH.net
>>439
ファイル名がリストアップされてる列があるなら
そこでまず回して重複排除したファイル名の配列 as Stringをつくればいいだけじゃ
てかその程度も思い浮かばないとなるとプログラミング向いてないような気がするわ

重複排除のプログラムって基礎の基礎でやるよ

便利な機能を使う前に順次・分岐・繰り返しでほぼほぼなんでも出来ちゃうことを学んだ方がいいわ
C言語の勉強するとそういうの鍛えられる感じする

474:デフォルトの名無しさん
20/06/02 08:37:46 ZejDuh3H.net
>>364
Readme読む限り、ちょっとこれはと思う。
一定間隔はあまり良くないな。
出来ればWM_DRAWCLIPBOARD捕まえるのが常套手段。

475:デフォルトの名無しさん
20/06/02 08:39:17 ZejDuh3H.net
>>386
まあ、プログラマ―としては糞コードの見本を強要されるわけだからねえ。

476:デフォルトの名無しさん
20/06/02 08:41:06 ZejDuh3H.net
>>398
引数という言葉を調べてみよう。

477:デフォルトの名無しさん
20/06/02 09:53:39.10 DG4jD+ms.net
い・・引数

478:デフォルトの名無しさん
20/06/02 10:17:05 ZKdkos41.net
いんすう、なの?
勝手に、ひきすう、って読んでた。

479:デフォルトの名無しさん
20/06/02 10:38:01.33 HxakEXb6.net
いんすうだと因数と間違えるから、わざとひきすうと読む慣習

480:デフォルトの名無しさん
20/06/02 11:01:38 P+GfDheU.net
ソヒキスウブンカイとかあったよねー。

481:デフォルトの名無しさん
20/06/02 11:28:56 Bxw1Fg+T.net
淫吸だとエロい言葉に聞こえるからひきすうと読む

482:デフォルトの名無しさん
20/06/02 12:59:58 86yzZ856.net
Sub セル2行を結合して出力()
    Sheets("雛型").Select
    ActiveSheet.Copy
 
    Dim gg As Long, rr As Long
    For gg = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
        Rows(gg + 1).Insert
        For rr = 5 To 31
            Cells(gg, rr).Resize(2).Merge
        Next rr
    Next gg
    HorizontalAlignment = xlCenter
    VerticalAlignment = xlCenter
    Range("A1") = "2行を結合して出力"
 End Sub

すみません、ネットで調べまくってる相変わらずのど初心者です。
セルの行挿入と結合を範囲指定して
2行を結合するのは何とか調べてできたのですが、
「セルの列挿入と結合を繰り返して
2列1行のセルにしたい」
というのができず。。ご教示頂けませんか。

理想は
「セルを2列挿入と結合をして3列1行のセルにする」や
「2列と2行の挿入と結合繰り返して2列2行のセルにする」
など、色々パターンを作りたいのですが。
ネットと入門編の本だとやはり限界を感じます。。
どなかた何卒お願いします。

483:デフォルトの名無しさん
20/06/02 13:09:54.31 YHzZdfxN.net
.resize(1,2).mergeとか
Range(rows(gg+1)rows(gg+2)).insertとか

484:デフォルトの名無しさん
20/06/02 14:39:08.29 cr7Q5ahz.net
セルの結合をマクロでやる設計者ってセンスないね

485:デフォルトの名無しさん
20/06/02 14:42:20 cr7Q5ahz.net
マクロとVBAな

486:デフォルトの名無しさん
20/06/02 16:30:35 wladzkcs.net
セル結合はなあ

487:デフォルトの名無しさん
20/06/02 17:14:02 3pwUYc8f.net
vlookupとセル結合をディスってはじめてexcel使い方として一人前

488:デフォルトの名無しさん
20/06/02 17:30:35.84 ZKdkos41.net
セル結合は帳票イメージでの最終手段。

489:デフォルトの名無しさん
20/06/02 17:36:37.19 86yzZ856.net
セルの結合をする理由は
取引先の提出フォームが客先ごとに
1セルの結合の構成が本当に様々で8種類くらいパターンがあり
元のマクロで出した値の貼り付けが出来ないのが現状です。
なので元のマクロの1行1列のセルの値を
セルの構成を客先のに合わせたシートに出力
そのシートから客先提出フォームに値の貼りつけ
というのをやろうとしています。

490:デフォルトの名無しさん
20/06/02 17:42:54.46 86yzZ856.net
>>461
すみません、どこにどう弄ったらいいか
教えて頂きたいです。
すみません、、

491:デフォルトの名無しさん
20/06/02 17:45:43.97 lB7mMLW8.net
>>468
自分で考えろ

492:デフォルトの名無しさん
20/06/02 18:33:10 0adtr6kX.net
じゃあ8種類のテンプレでよくね

493:デフォルトの名無しさん
20/06/02 18:40:35 bGVvB1yX.net
結合したりvlookupとかしたいから、わざわざエクセル使ってるんじゃないの?

494:デフォルトの名無しさん
20/06/02 18:55:17 R+Y1d9Tj.net
セル結合された部分は別の結合とかできないから
その都度結合解除するとか
行の挿入や削除で表が壊れたり
見えなくなるプロパティがあったり
嫌な思い出しかない

495:デフォルトの名無しさん
20/06/02 19:17:40.08 xDFjMRpH.net
Application.OnKey ってプロシージャに引数渡せないのが残念だなぁ
これってキーごとにプロシージャ作らないといけないかね

496:デフォルトの名無しさん
20/06/02 19:20:48.48 ZejDuh3H.net
>>462
そんなこたぁねえだろ。
確かに問題多いけど、分かった上で使うことあるぜ。
ゴミのSendkeys使うよりはあるね。

497:デフォルトの名無しさん
20/06/02 19:31:05.26 0+iVbcJA.net
Sub 列挿入()
ActiveSheet.Copy
Dim i As Long
For i = 32 To 8 Step -1
Columns(i).Insert
Next
End Sub
ここまでは何とか、、ってとこです。
後は指定したの行を全部何とか
2列1行のセルに
道のりが遠すぎる…

498:デフォルトの名無しさん
20/06/02 19:38:40.44 xX39KyXM.net
データモデルに入れたデータからSQLを使ってシートに出力する方法を教えてください。
ネットになかなか情報がなくて
ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook.Connections("クエリ - パワークエリ名"), Destination:=Range("$A$1")).TableObject
から
.WorkbookConnection.OLEDBConnection.CommandText = "テーブル名" にするとテーブルを出力
.CommandText = Array("EVALUATE CALCULATETABLE('テーブル名' , 'テーブル名'[項目名] =""検索語"" ) ")
.CommandType = xlCmdDAX
のようにするとDAX式で加工したテーブルを出力できるようになりましたが、SQLを使用する方法がわかりません。

499:デフォルトの名無しさん
20/06/03 03:13:14.17 4xNyRocT.net
>>475
Sub 列挿入()
ActiveSheet.Copy
Dim i As Long, c As Long, r As Long 'カウント用
Const n As Long = 2 '列挿入, 列マージ数
Const sC As Long = 8, eC As Long = 32 '開始列, 終了列
Const sR As Long = 2, eR As Long = 10 '開始行, 終了行
With Excel.Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
For c = eC To sC Step -1
For i = 1 To n - 1
Columns(c).Insert
Next i
Next c
For c = eC * n To sC Step -n
For r = sR To eR
Cells(r, c).Resize(1, n).Merge
Next r
Next
With Excel.Application
.DisplayAlerts = True
End With
End Sub

500:デフォルトの名無しさん
20/06/03 03:29:44 4xNyRocT.net
あっ行別の列マージならRange.Merge Across:=Trueってのがあるのか初めて知ったわ

501:デフォルトの名無しさん
20/06/03 17:16:57.27 AwTWg+pQ.net
すいません。関数を使って集計する方法を教えていただけないでしょうか。
index matchの組み合わせもしくは、sumifもしくはindex match sumifの複合で表示させたいです。
画像の出荷と書かれたセルに関数を入れて集計したいです。
集計は参照シートの黄色で書かれた「販売+その他出荷」の合計を表示したいです。
sumifでは縦の計算になってしまい、横の足し算が出来ない印象です。
上の数字はmatchを使った際の引用条件になると思い入れました。
説明わかりづらくてすいません。関数を教えていただけないでしょうか。
具体例のエクセルは簡単に書いてますが、実際に書くエクセルはデータが膨大なものです。
なぜかindexもうまく引用できていませんでした。

URLリンク(d.kuku.lu)

502:デフォルトの名無しさん
20/06/03 17:19:07.42 bl/wSmIk.net
>>479
死ねよ、ここは何のスレかわかっているか?

503:デフォルトの名無しさん
20/06/03 17:31:05 AwTWg+pQ.net
すれ違いでしたか。。 別のスレで質問してみます
失礼します

504:デフォルトの名無しさん
20/06/03 18:58:22.75 ajKAwYcj.net
>>481
説明が下手な質問には答えられない

505:デフォルトの名無しさん
20/06/03 19:02:55.47 4xNyRocT.net
>>479
Offsetっていうセルのサイズを変える関数があるが
この集計を関数でやるのは根本的にムリだね
1,10行目の数字とかに何の関連性もないから列が特定できない
元データ正規化すんのが先だよ

506:デフォルトの名無しさん
20/06/03 21:04:01 Wz


507:EARBto.net



508:デフォルトの名無しさん
20/06/03 21:12:23 eXcAe8GC.net
そういうのは言語関係ない
上級者のコード読むなりプログラミング技法の初歩とかを勉強せえ

509:デフォルトの名無しさん
20/06/03 21:16:06 jxQ4kFWw.net
上級者じゃないんでわからんが
数こなしていくうちに上達するんじゃね

510:デフォルトの名無しさん
20/06/03 22:45:33 DFbqrKTL.net
ネットで勉強してる初心者以前のレベルだけど
変数をiで宣言してるサイトが結構多いけど
テンプレ的な変数名なの?何かの略字?

511:蟻人間 ◆T6xkBnTXz7B0
20/06/03 22:54:44 fRs9+Xkd.net
integer

512:デフォルトの名無しさん
20/06/03 22:55:14 1Bet+/qH.net
>>487
もともとはIntegerの頭文字から
とりあえず整数型変数にはI、もっと必要な時はJ、K以下略を使うというルールを70年ぐらい前にIBMの技術者が決めて、それが今まで慣習として残っている

513:デフォルトの名無しさん
20/06/03 22:58:16 k+INKoSh.net
テーブル(ListObject)の指定列に計算結果値をLoopで書き込む処理を作ったんだけど、
ひどく遅延します。事象の原因と対策わかる方いたら教えてください。

・(同一シートの)テーブルの枠外だと同じ行数でも瞬時に終わります。
・計算結果じゃなくて 1 を埋め込むのでも遅い。
・再計算Off
・ためしにEnableEvents = false もやってみたけど効果なし。

3000行くらいなんですが、しばらく帰ってこない感じ。
結局式埋込に変えたんだけど、その場合だと5~6秒くらい。

テーブルなんてそんなもん、ということであればそう認識します。
詳しい方教えてください。

514:デフォルトの名無しさん
20/06/03 22:59:26 uWfzdzS4.net
>>484
モジュールが増えるのは、
他に流用するからとか、
スクロールが面倒だからとか、
そんな理由だと思うけど。

宣言は一番上派、使用する直前派。
参照設定派、CreateObject(xxx)派、
If a = True Then派、If a Then派、
色々だから気にすんなと。

515:デフォルトの名無しさん
20/06/03 23:02:38.52 k+INKoSh.net
>>489
iteratorが語源かと思った。

516:デフォルトの名無しさん
20/06/03 23:03:56.76 LXJ+6sS7.net
DEFINT A-Z

517:デフォルトの名無しさん
20/06/03 23:35:44.50 6MdsocRT.net
ループ変数にはiもよく使うけど、rとかcも割と使う。
列と行を入れ子にしてループ処理する時は、こちらの方が分かりやすい。

518:デフォルトの名無しさん
20/06/03 23:40:14.49 K30dfupm.net
>>487
古くは Fortran かな
I, J で始まる変数は無条件で整数型だった
Iがアルファベットの10番目だからという
よくわからない説もある

519:デフォルトの名無しさん
20/06/04 00:05:55 k3k6AIFZ.net
実際の慣例ではどうなのか知らないが、i~tまでを使うって教えられた
intのtまでってことで
まあ大抵使ってもi,j,kぐらいだと思うが

520:デフォルトの名無しさん
20/06/04 00:09:42 L9xk6UQ0.net
視認性が悪いから、j とか l とか使いたくない。
なので、 i, k, n, とか適当に飛ばして使ってる。

521:デフォルトの名無しさん
20/06/04 00:09:53 OnK1RXVm.net
自分は最大nまで使うよ。
i、j、k、


522:l、m、n



523:デフォルトの名無しさん
20/06/04 00:14:11 L9xk6UQ0.net
>>494
r は Range Loop用と決めてるから、r, c, はあまり使わない。
そんときは iR, iC ってやるな。
c は1文字入れるとき使うかも。
人それぞれやね。

524:デフォルトの名無しさん
20/06/04 01:00:45 BD433+5i.net
すみません、教えてください。<br>
caseの条件を変数で設定していると条件に一致しなくてelseに流れてしまいます。<br>
ベタ打ちで条件を記載した場合は、正しく処理へ流れるのですが・・・<br>

sub テスト() <br>
Dim a As String <br>
Dim temp As String
a = "みかん"
temp = "りんご"", ""みかん" 'ここはチェックボックスの選択によって可変にする予定

Select Case a
Case temp
Msgbox("冬")
Case Else
Msgbox("冬以外")

End Select

End sub

525:500
20/06/04 01:02:03 BD433+5i.net
<BR>は誤って記載したので無視してください。
すみません。

526:デフォルトの名無しさん
20/06/04 01:05:29 bxYszK7T.net
ダブルクォーテーション大好きなんだな

527:デフォルトの名無しさん
20/06/04 01:09:25.97 22WZQRcv.net
>>490
同じ行やってみたけど一秒かかんない
テーブルに数式列あると遅延したけどcalculation=falseで気にならなくなったし

528:デフォルトの名無しさん
20/06/04 01:47:41.43 OTCVkkK8.net
馬鹿の特徴
教えて、助けて等で始まる書き込みをする

529:デフォルトの名無しさん
20/06/04 02:18:53.76 oqMXr6z+.net
>>500
Caseの条件が変数かどうかは関係ないから、どこか別のところが間違ってる
よく見直せ

530:デフォルトの名無しさん
20/06/04 03:10:03 e1eCmfnY.net
>>496
俺だけかな i1,i2,i3 とか、 iX,,iY, iCnt, iLoop, iStep みたいに使う

531:デフォルトの名無しさん
20/06/04 03:52:02 e1eCmfnY.net
命名規則とかハンガリアン表記とかあるよね

URLリンク(ja.wikipedia.org)命名規則_(プログラミング)

532:デフォルトの名無しさん
20/06/04 07:06:03.13 iR1nViON.net
>>489
Fortranが始まりが正解

533:デフォルトの名無しさん
20/06/04 08:16:07 i/KeU7gc.net
ループのiはindexのiかと思ってたわ
for(i=0;i<10;i++)
 value[i] = ~~的な

534:デフォルトの名無しさん
20/06/04 10:24:37 lE9Ts1od.net
C列が変数aと同じ値で、かつD列が変数bと同じ値で、かつE列が変数cと同じ値の各行で
Z列(整数)が最大値の行の行番号を変数iに代入する方法を教えてください

Dim r As Long,i As Long
Dim a As String, b As String, c As String

For r = 5 to lsr
If Cells(r,3) = a And
Cells(r,4) = b And
Cells(r,5) = c Then
Rows(r).???
End If
Next cnt

i = Application.WorksheetFunction.Max(???)

535:デフォルトの名無しさん
20/06/04 12:04:02 0kTawYgE.net
>>510
Z列の"暫定"最大値を保持する変数を使います。
Dim r As Long, i As Long
Dim a As String, b As String, c As String
Dim Z_v As Long   '追加部分
Dim lsr As Long  '定義漏れですよ
lsr = 処理範囲の最終行をセット
Z_v = 0    ' Z列の最大値が負になりそうなら-9999999999などとしておく
For r = 5 to lsr
  If Cells(r, 3).Value = a And _
    Cells(r, 4).Value = b And _
    Cells(r, 5).Value Then
    If Cells(r, "Z").Value > Z_v Then  ' 暫定最大値を超えたら
      Z_v = Cells(r, "Z").Value     ' 暫定最大値を更新
      i = r                 ' 行位置も更新
    End If
  End If
Next

最大値となる行が複数あった場合は、最初の行位置が i の値となります。

536:デフォルトの名無しさん
20/06/04 12:13:10.50 0kTawYgE.net
>>511 の修正
Cells(r, 5).Value Then
の行は
Cells(r, 5).Value = c Then  です

537:510
20/06/04 13:00:40 lE9Ts1od.net
>>511
ありがとうございます!いつも勉強になりますm(__)m

538:デフォルトの名無しさん
20/06/04 14:32:12.42 L9xk6UQ0.net
>>503
レスありがとう。
どうも同時に開いているブックに大量の関数が配置されているとListObject内でLoop入力時に遅延するみたい。再計算Offでも。
まっさらのブックにテーブル1個作ってLoop書き込みしたら瞬時だった。
そこに関数を多く含むブックを同時に開くことで、上記のテーブルで遅延が発生。特に自作関数が影響大きいみたい。
追加で開いたブックからシートを一つずつ削除→計測を繰り返したら、少しずつ早くなって、最終的に瞬時になった。
数行ならパラパラッって感じで気にしなくていいんだろうけど行数が多いとかなり待たされる。
ちなみに対象のテーブルを「範囲に変換」するとどんだけ関数を含んでいようが瞬時に書き込まれる。
こんなもんだと思うしかないのかもだけど、再計算Offでも影響を受けるのが納得いかない。
Win7 on vmwareな環境で試したので自宅のWin10でも試してみる。

539:デフォルトの名無しさん
20/06/04 15:52:15.99 MXeQjX7b.net
おれ、昔は i , j ばかり使ってたけど、最近は回す配列の名前を反映した変数を使ってる
Forブロックが単独で存在するならいいんだけど、if や 他のForブロックと組み合わさって
階層構造になってると、だいぶあとになってメンテするときに理解が遅れる

540:デフォルトの名無しさん
20/06/04 16:42:33 9nIeytil.net
いいね

他にもループ内の処理をそのまま関数にしてしまう方法もある
コメントを書かなくても処理の意味を関数名として記述できるし、再利用性も高まる。
おまけとしてVBAの構文にはないcontinue(処理を中断して次のループへ入る)が行える。

もしくは再帰関数を定義してfor文自体を無くすという凝った方法もある。

541:デフォルトの名無しさん
20/06/04 18:37:05 08KHEEC1.net
データモデルに入れたデータからSQLを使ってシートに出力する方法を教えてください。

ネットになかなか情報がなくて
ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook.Connections("クエリ - パワークエリ名"), Destination:=Range("$A$1")).TableObject
から
.WorkbookConnection.OLEDBConnection.CommandText = "テーブル名" にするとテーブルを出力

.CommandText = Array("EVALUATE CALCULATETABLE('テーブル名' , 'テーブル名'[項目名] =""検索語"" ) ")
.CommandType = xlCmdDAX
のようにするとDAX式で加工したテーブルを出力できるようになりましたが、SQLを使用する方法がわかりません。

542:デフォルトの名無しさん
20/06/04 19:02:46.64 fQr1zLSRu
ガチのにわかでスレチかもしれませんが
エクセル上で123d+789という数字を10進数に直すことはできますか?

543:デフォルトの名無しさん
20/06/04 19:00:14.86 OTCVkkK8.net
馬鹿ではなさそうだが、しつこい教えてクレクレに呆れる
ググれよ

544:デフォルトの名無しさん
20/06/04 19:01:01.58 gQJ1UXfv.net
>ネットになかなか情報がなくて
逆にそれを探し当てる方が難しいと思うんだが・・・。
とりあえず、マクロを記録しながらMSクエリを操作すれば答えが出ると思う。

545:デフォルトの名無しさん
20/06/04 19:03:34.01 gQJ1UXfv.net
>パワークエリ名
あ、2016以上か。
パワークエリがあるせいで、MSクエリにたどり着かなかったということか。

546:デフォルトの名無しさん
20/06/04 19:43:02 ZOeL7/nf.net
>>516
同じ処理を関数にするのはよくあることだけど、同じ処理を括るよりは意味合いで括る方が上策だと思う。
適切に関数に分けていれば、そもそもそんなに入れ子にならんだろう。

再起なんて、それこそ意味合いで自然に出来上がるもんで、無理して作るもんじゃねえと思うんだが。

547:デフォルトの名無しさん
20/06/04 22:08:56.53 uauxSmqO.net
Sub セル構成を2行3列に()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
 j = 2 '←ここで何列おき
 Set rng = ActiveSheet.UsedRange
 For i = rng.Columns.Count To 8 Step -1
rng.Cells(10,i).Resize(10,j).EntireColumn.Insert  Next  Set rng = Nothing
Range("G10", "I510").Merge Across:=True
Range("J10", "L510").Merge Across:=True
Range("M10", "O510").MergeAcross:=True
Range("P10", "R510").Merge Across:=True
Range("S10", "U510").Merge Across:=True
Range("V10", "X510").Merge Across:=True
Range("Y10", "AA510").MergeAcross:=True
Range("AB10", "AD510").Merge Across:=True
Range("AE10", "AG510").Merge Across:=True
Range("AH10", "AJ510").Merge Across:=True

548:デフォルトの名無しさん
20/06/04 22:10:21.75 uauxSmqO.net
Range("AK10", "AM510").MergeAcross:=True
Range("AN10", "AP510").MergeAcross:=True
Range("AQ10", "AS510").Merge Across:=True
Range("AT10", "AV510").Merge Across:=True
Range("AW10", "AY510").MergeAcross:=True
Range("AZ10", "BB510").Merge Across:=True
Range("BC10", "BE510").Merge Across:=True
Range("BF10", "BH510").Merge Across:=True
Range("BI10", "BK510").Merge Across:=True
Range("BL10", "BN510").Merge Across:=True
Range("BO10", "BQ510").MergeAcross:=True
Range("BR10", "BT510").Merge Across:=True
Range("BU10", "BW510").MergeAcross:=True
Range("BX10", "BZ510").Merge Across:=True
Range("CA10", "CC510").MergeAcross:=True
Dim po As Long, ro As Long
For gg = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
Rows(po + 1).Insert
For ro = 5 To 79
Cells(po, ro).Resize(2).Merge
Next ro   Next po
HorizontalAlignment = xlCenter
VerticalAlignment = xlCenter
Application.DisplayAlerts = True
End Sub
VBAの勉強すらしてない俺が10個くらいのサイトからパクってつなげて一応希望通り動いた
setとかレンジ型とか意味わからんわ…

549:デフォルトの名無しさん
20/06/04 22:13:08.78 uauxSmqO.net
For po = Cells(Rows.Count, "E").End(xlUp).Row To 11 Step -1
ここはこうだったな俺の変数癖だわ
なんかもう難しすぎて勉強するよりネットで検索してパクって繋げたほうが楽な気がする
39歳からVBA覚えるって脳みそがついていかんわ

550:デフォルトの名無しさん
20/06/04 22:15:04.15 k3k6AIFZ.net
そんな報告いらん
自分の日記スレでも立てればいい

551:デフォルトの名無しさん
20/06/04 22:15:05.91 OTCVkkK8.net
隙あらば馬鹿が日記を書き込む

552:デフォルトの名無しさん
20/06/04 22:19:18.86 uauxSmqO.net
隙あらば馬鹿って言いにきてんの?
定期的に馬鹿としか書いてないけど

553:デフォルトの名無しさん
20/06/04 22:22:05.20 i/KeU7gc.net
そうして精神を保ってるとでも思っておこう

554:デフォルトの名無しさん
20/06/04 22:43:14 OTCVkkK8.net
>>528
馬鹿は黙っていろよ

555:デフォルトの名無しさん
20/06/04 22:57:09.20 nxAuSZLn.net
セルにコメント挿入して中の文字色を一部だけ変えれる事って出来ますか?
strTxt=111111(vbtab)223(vbtab)8975
例えばこんな文字列の223だけ赤色、それ以外は黒色。

556:デフォルトの名無しさん
20/06/04 22:59:22.67 c/xPJE8L.net
>>528
お前の書き込みは馬鹿の自己満足以外の何物でもないぞ

557:デフォルトの名無しさん
20/06/05 00:25:19 fHeju+Td.net
>>531
Cells(1, 1).AddComment "あいうえおかきくけこさしすせそ"
Dim c As Excel.Characters
Set c = Cells(1, 1).Comment.Shape.TextFrame.Characters(2, 10)
c.Font.ColorIndex = 3

例えばこれだと、コメントを追加して2文字目から10文字のフォント色を色番号3=赤に変える
という処理になるよ。
他にもフォント,太字斜体,サイズとか、fontクラスのものなら何でも変えれるね。
処理的には変更開始と文字数をどう特定するかだけど頑張ってね

558:デフォルトの名無しさん
20/06/05 00:27:45 2CjtUfu9.net
>>531
comment.shape.textFrame.characters

559:デフォルトの名無しさん
20/06/05 00:50:59.98 8UrD2y10.net
39歳で限界とか。元々能力が低いとしか。

560:デフォルトの名無しさん
20/06/05 05:51:53 td6kQI8l.net
>>535
なんだと、このハゲ!

561:デフォルトの名無しさん
20/06/05 06:27:32.36 YMz2fC5g.net
>>523
一応解説すると、、、
値にはいろんな型があるけど、
 文字リテラル(例:"Hello")
 数値リテラル(例:123)
 日付リテラル(例:#2020/6/5#)
 真偽値 (例:True)
 上記で構成される配列(例:Array("月","火","水") )
これらは(またはこれらの値を返す式)はイコールだけで変数にぶっ込めるけど、
これら以外はすべてオブジェクトと見なされるので、
 Set 左辺=右辺
の記述で変数に代入する必要がある。
例えば、ブック、シート、といったものはすべてオブジェクト扱い。
もちろんセル範囲(Range)もオブジェクトなので、Setが必要。
範囲オブジェクトを返すには Range("アドレス記述")で表せるけどこれだと
示してくれた例のように全部書き出す必要がありコードが冗長になる。
そんなときはCells(行,列)の記述で範囲オブジェクトを返すとLoop処理で
簡潔に記述できる。
Cells(行,列)だと1セルしか表せないからRangeと組み合わせて
 Range(Cells(行,列),Cells(行,列))
みたいに記述すれば指定範囲を表現できる。
または、
 Cells(行,列).Resize(500,3)
みたいに記述すれば範囲サイズを拡張できる。
あとはForで行、列の変数をうまうコントロールすればOK.
理解の助けになるといいけど、、

562:デフォルトの名無しさん
20/06/05 06:58:05 Lq81HhXC.net
>>536
年齢を言い訳に使ってる時点で人として残念な人でしょ

563:デフォルトの名無しさん
20/06/05 07:40:51.89 oZqvF/U1.net
まったく最近の若者は……

564:デフォルトの名無しさん
20/06/05 08:25:59 KlfmBaSN.net
勉強の話が出てるけど上級者だって全てを覚えているわけじゃない。

>>533のCharactersの話だって、取りあえずこの後に"("を打って見れば説明が出てくるんで、そこから推理してる。
そして推理したら実際に別でテストする。
上手く動いたら、うっすら何となく覚える。
うっすら覚えてる場合は次回も"("打ってからの推理から始まる。
それで問題は起こらないし、何回か繰り返せば完全に覚える。

丸暗記は大変だし結果的に覚えない。

565:デフォルトの名無しさん
20/06/05 10:36:23 fHeju+Td.net
いや何となく覚えてたけど

566:デフォルトの名無しさん
20/06/05 12:39:12 tnz6CDPA.net
そのなんとなくでいんじゃねって話でなくて?

567:デフォルトの名無しさん
20/06/05 18:45:39 IG+dLk9+.net
>>525
そろそろ引退したらどうですか?

568:デフォルトの名無しさん
20/06/05 19:01:37 7QZKDprx.net
>>522
入れ子時の対策として言っただけで、普通は入れ子になりづらいとか急に言われても困る

あと意識せずに自然に再帰になるとかマ?
関数型以外じゃ意識しないと普通できないだろw
やるとしても配列の畳み込みメソッドぐらいなんでは?

569:デフォルトの名無しさん
20/06/05 20:18:14.26 KlfmBaSN.net
>>544
例えば初めて再起を使った時に再起なるものなんか知らなかった。
単純に自分を呼び出せば良くね?と思って書いたら再起だった。
再起なるものを知った後でも、基本的に自分を呼び出せば良いじゃんと思う場面が殆ど。
例えば、パスを与えたらそのフォルダの下のファイルやフォルダ名を全部列挙するという関数を考える。
列挙してる中でフォルダ名取得したら、そのフォルダ名で自分を呼び出せば良いわけだ。
そうすればその呼び出しで更に配下の列挙が得られるんだから。
もっとも、このファイル列挙では最初はDir関数グローバルな動きをすると知らなかったので上手く行かなかったけど。

570:デフォルトの名無しさん
20/06/05 20:57:20.30 H0L/fXZL.net
再起って何だろう?

571:デフォルトの名無しさん
20/06/05 21:05:54 rCWyQTVZ.net
>>543
職場の業務というか海外含めて複数の支部で使われてるから出てくるデータを瞬時に処理できるコードをここで3つ教わってしまったからね
もうVBA続けるしかないわ

textデータにプローシージャコピーしてクラウドに保存してあるレベルの

572:デフォルトの名無しさん
20/06/05 21:08:38 cCPYycaK.net
>>546
たぶん再帰の変換ミスだろ

573:デフォルトの名無しさん
20/06/05 21:32:27 ZSs62RcL.net
色々調べたのですが・・・。
コピーし貼り付けのマクロで

条件付き書式だけを除いて張り付ける、というマクロを探しています。

今の状態ですと条件付き書式の情報まで上書きされて困っています。
ご教授宜しくお願い致します。

574:デフォルトの名無しさん
20/06/05 21:43:17.50 H0L/fXZL.net
>>548
変換ミスにしては何度も使ってるぞ

575:デフォルトの名無しさん
20/06/05 21:47:17.22 2CjtUfu9.net
>>549
まず他スレの質問締め切るなり断り入れるなりして来いよ

576:デフォルトの名無しさん
20/06/05 21:47:20.00 nvWU7/6f.net
貼り付けた後に
.FormatConditions.Delete
で条件付き書式だけ削除じゃダメなの?

577:548
20/06/05 22:17:11 ZSs62RcL.net
>>552
有難うございます!
しかしそれでは出来ないのです。すいません。

578:デフォルトの名無しさん
20/06/05 22:21:45.02 WwtDf+8P.net
>>549
そもそも"コピー"する必要はあるの?

579:デフォルトの名無しさん
20/06/06 02:50:09 2JXrsjtz.net
pasteSpecial繰り返して必要なものだけ貼り付けるしかないんじゃない?

580:デフォルトの名無しさん
20/06/06 07:05:32 boE/wbIl.net
何度でも蘇るのが再起だろうな

581:デフォルトの名無しさん
20/06/06 08:07:18.40 dTKuJKfw.net
>>436
ロマサガ3とはなかなか分かってる先輩だなw

582:デフォルトの名無しさん
20/06/06 12:47:06 EOD/vRIp.net
VBAの配列にもCount使わせて欲しい・・・・
面倒でたまらないわぁ
ちなみにSplitで空配列になったときってUBoundは必ず-1返すのかな
まぁSplitする前の文字列が空かどうかで判別すればいいんだけど

583:デフォルトの名無しさん
20/06/06 14:19:39.59 nsmtjJW2.net
SetTimerのコールバック関数内でSetTimerしなおすやつは、再起といっていいかも
あれ、再帰じゃないし

584:デフォルトの名無しさん
20/06/06 14:24:54.65 FUHWS7EH.net
>>558
そういうのはラッパークラス定義しちゃえばいい
要素を持たない配列はuboundで-1になるけど、
配列を返す関数をそのままuboundの引数にするとメモリが解放されないらしい
一度変数に代入してから、その変数を引数にするしかない

585:548
20/06/06 19:20:06 evXurMFK.net
>>555
有難うございます!そういうやり方もありますね。勉強になりました。

あれからIF関数と条件付き書式を組み合わせて問題克服できました。
相談に乗っていただけた方みなさん有難うございます。
お騒がせしますた。

586:デフォルトの名無しさん
20/06/07 01:10:37.79 czcu/Wo5.net
ボタンを押してランダムに1ー100の数字をコンピュータに選ばせて、その結果をセルに表示させたいと思いマクロを組みました。
それはできたのですが、ボタンを押すごとに出る数字の履歴を残したいときはどうしたらいいでしょうか?例えば初めはA1、次はA2、次はA3…のようにしたいです。

587:デフォルトの名無しさん
20/06/07 01:27:02 MDOjbT3v.net
また馬鹿が来た

588:デフォルトの名無しさん
20/06/07 01:42:25 Dw2BAEV/.net
消さなきゃいんじゃないの…

589:デフォルトの名無しさん
20/06/07 01:51:41 czcu/Wo5.net
1回目、2回目とボタンを押すごとにA列を下方向に順に記録させたいのです。
説明が悪いかも、すみません

590:デフォルトの名無しさん
20/06/07 02:00:00 81VYwWTh.net
色々やり方があるが回数を持たせるのが簡単だろうな

591:デフォルトの名無しさん
20/06/07 02:00:43 Dw2BAEV/.net
その通り表示させるセル変えればいんじゃないの…

592:デフォルトの名無しさん
20/06/07 02:16:26 MDOjbT3v.net
>>565
馬鹿過ぎて話しにならない
こんなのがわからないような馬鹿には色々無理

593:デフォルトの名無しさん
20/06/07 02:44:14 81VYwWTh.net
>>568
初心者ってこんなもんだろ

594:デフォルトの名無しさん
20/06/07 03:03:21.76 zKcEsa3T.net
初心者は全部同じというゆとり理論

595:デフォルトの名無しさん
20/06/07 03:47:02 kmJ+/rqz.net
>>565
A列の最終行を探して次の行に数を入れる

596:デフォルトの名無しさん
20/06/07 03:48:37 kmJ+/rqz.net
最終行は値の入ってる最後って意味ね

597:デフォルトの名無しさん
20/06/07 05:24:32.66 cf9XL00M.net
まずは「1ー100」をマトモに書けるようになるのが先決だな

598:デフォルトの名無しさん
20/06/07 05:49:46 dyM/5p3V.net
>>545
再帰はスマートに書けることも多いけど再帰の数だけメモリを消費する
ファイル列挙みたいな大量になりかねないデータを扱う場合はおすすめできない
時間的にもメリットがないどころか下手すると遅くなり得る
列挙程度のどうでもいいような処理に使うべきじゃないよ

599:デフォルトの名無しさん
20/06/07 07:38:47 czcu/Wo5.net
>>571
は!なるほど!!
ありがとうございます!!


皆様もありがとうございます!精進します!

600:デフォルトの名無しさん
20/06/07 07:53:48 MHP0r7Cu.net
>>574
〉ファイル列挙みたいな大量になりかねないデータを扱う場合はおすすめできない

じゃあこの場合どう処理するの?

601:デフォルトの名無しさん
20/06/07 07:56:27 ntu7XVDq.net
コマンドプロンプトで十分だと思うけど。
VBAでやると、ファイル名に特殊文字が使われていた時に止まって地味にウザい。

602:デフォルトの名無しさん
20/06/07 08:33:05.30 xH2ID0fk.net
>>574
何でこんな頓珍漢な指摘が出てくるんだろうね。
そんな話じゃないだろうに。
自然に再帰になるという例であって、問題あるなら辞めれば良いだけのこと。
それに、そのメモリ消費だが下手くそな組み方だったらその通りだが、そんな組み方しないでしょ。
>>577
何の為にファイル列挙してると思ってんの?
それで終わりの筈が無いだろうw

603:デフォルトの名無しさん
20/06/07 08:38:56.41 ntu7XVDq.net
>>578
だからなに?
コマンドプロンプトで出力したものは再利用できないとでも?

604:デフォルトの名無しさん
20/06/07 09:55:56 kdiJvE9H.net
>>560
さんきゅ

605:デフォルトの名無しさん
20/06/07 13:01:44.81 H9nBLvae.net
>>577
> VBAでやると、ファイル名に特殊文字が使われていた時に止まって地味にウザい。
それお前のコードがバグってるだけだろw

606:デフォルトの名無しさん
20/06/07 13:10:29.47 xH2ID0fk.net
>>579
出来るに決まってんだろw
でも、それを良しとするか?
マトモに書ける奴は良しとはしないだろ。
仕方なしにはするけど。

607:デフォルトの名無しさん
20/06/07 13:12:52.96 xH2ID0fk.net
>>581
いや、これはあり得る。
多分回避も出来るけど、そこ迄考えるのは面倒いので。
問題が起こったら何とかするか、その名前は無理と言うかも。
何しろVBA以外でもトラブルの元なので。

608:デフォルトの名無しさん
20/06/07 15:02:44.03 bx1NUQ41m
>>518   解析かな?→python

609:デフォルトの名無しさん
20/06/07 15:23:54.63 H9nBLvae.net
>>583
具体的なこと書かないであり得るとか言われてもなぁw

610:デフォルトの名無しさん
20/06/07 16:37:31 ntu7XVDq.net
>>582
知らねえよ。
お勧めできないならこれで良いだろって代替案出しただけで。

>>585
「特殊文字」は具体的じゃないのかよ。
何の文字かまでいちいち書いてあげないと納得しないか?

611:デフォルトの名無しさん
20/06/07 17:05:54 odk7pmo/.net
ファイル名に使えるのにVBAで扱えない文字なんて心当たりがないので、ぜひ具体的な文字を教えてくれ

612:デフォルトの名無しさん
20/06/07 17:48:58 EhPxLCve.net
おすすめの教本ありますか?

613:デフォルトの名無しさん
20/06/07 17:49:37 H9nBLvae.net
>>586
> 「特殊文字」は具体的じゃないのかよ。
どこが具体的なんだよw

> 何の文字かまでいちいち書いてあげないと納得しないか?
文字と何をして止まるのかを書かないとね
まあ書けないと思うけど

614:デフォルトの名無しさん
20/06/07 18:20:31.92 s05OkEKn.net
>>588
記録したソースを弄った方が早い
どうしても本が欲しいというなら、出来るだけ完成したソースがたくさん載ってる本がいい

615:デフォルトの名無しさん
20/06/07 18:34:00.18 Rq/eP/Hm.net
VBAでは無いけれど
今回のオンライン申請では氏名の間に空白スペースがあったり
住所のハイフンなんかでエラーだったよ
山 田 花 子
山田 花子
山田 は な 子
11-20-13
十一一二十ー十三
一丁目 II ノ丘 ハイツ III
一- 弐- 三

616:デフォルトの名無しさん
20/06/07 18:53:28.87 H9nBLvae.net
だから何?
それそういう仕様なんだろ(まあバグかもしれんが)

617:デフォルトの名無しさん
20/06/07 18:56:58.14 ntu7XVDq.net
>>589
ああ、確かに特殊文字じゃ書けないわな。
|あいうえお 一番左にカーソルがある状態。
あ|いうえお 1回右を押す
あい|うえお 2回右を押す
あい|うえお 3回右を押す ←2回目と3回目が変わらない。こういう状態になる文字だよ。
あいう|えお 4回右を押す
あいうえ|お 5回右を押す
これで満足か?

618:デフォルトの名無しさん
20/06/07 19:05:10.46 ntu7XVDq.net
>>587
特殊以外だと、日本語環境で中国語とか。

619:デフォルトの名無しさん
20/06/07 19:26:44 eHR7BWdB.net
>>591
それ例ではスペースとかハイフン無いのに入力してエラーのパターンでは

620:デフォルトの名無しさん
20/06/07 19:30:43 H9nBLvae.net
>>593
もしかしてカーソルが「止まる」とか言ってたのか?
想像以上に低レベルだったなw

621:デフォルトの名無しさん
20/06/07 20:18:15 ZURHSwDA.net
そういえばADOを使ったcsv取り込み機能でうちの業務システムから出力したcsvファイルを取り込んだらエラーが出たことあったな。
ファイル名変えたら取り込めたけど。

622:デフォルトの名無しさん
20/06/07 20:32:18 1v0hAbPt.net
>>596
>>594
オイオイ、♬みたいな奴だろ。
文字列変数で受けると?になっちまうんだ。

623:582
20/06/07 20:50:04 1v0hAbPt.net
ファイル名に?が入ったまま何かの処理をすればエラ―吐いて止まるというのは考えられる。

というか、何で俺が解説しなきゃならねえんだよ。
頼むぜw

624:582
20/06/07 20:56:23 1v0hAbPt.net
>>591
そいつはレベルが低いな。
スペースなんて正式な住所や氏名にはあり得ねえとして、入力したもんから片っ端から抜いちまう処理を入れるもんだ。

ハイフンはちょっとあり得る。
普通はマイナス使うと思うんだが罫線記号使ったり似たのがいっぱいあるからな。

625:デフォルトの名無しさん
20/06/07 21:55:32.54 XVHV5xvT.net
これだな
>Excel VBA 質問スレ Part43
>274 名前:デフォルトの名無しさん[] 投稿日:2016/12/02(金) 22:33:29.62 ID:rRSQCExt [1/2]
>ちょっと質問
>
>・おもむろにファイルエクスプローラを開く
>・なんでもいいからファイルのプロパティを開く
>・そこの作成日時をドラッグする
>・セルのA1にペーストする
>
>例えば 2013?年?12?月?1?日、??17:02:28
>これを(すでに文字化けしてると思うが)
>2013/12/1 17:02:28
>に整形したいんだけど
>どうすればいいんだ?
>半角に見えるけどサクラでみるとU+200Fとなっている
>中には数値の間にも混入しているのもある
>最初からFSOで取得するのは無しで
>すでに手動で取り込んだ数百件ものデータなんだ
>よろしくお願いします

626:デフォルトの名無しさん
20/06/07 22:23:02.67 QPxy+dct.net
再現しないぞ

627:デフォルトの名無しさん
20/06/07 22:44:34.20 Zvt1FY8k.net
>>600
そりゃ、住基ネットのデータベースが
インターネットからは参照不能で
全国の一般の素人が入力する事を想定した設計に無理があったんでしょ。

628:デフォルトの名無しさん
20/06/07 23:18:32 kciisc/v.net
前スレでここで教えて貰ったのが完成した
課のみんなのPCに入れて使いたいらしい
パス指定するタイプだから

・読取専用にする
・プロジェクトプロパティをロック
・C直下に置いてショートカットをデスクトップに置いてやる
・シート名は変えるなと徹底

こんだけ教えとけばまぁ大丈夫だよね?

629:デフォルトの名無しさん
20/06/07 23:22:24 wDFSrhzA.net
セルの行と列の変数名って業務でよく使うんだけど

Dim r As Long  '行
Dim c As Long '列
これで癖付けてっていいですか?いいですよね?

630:デフォルトの名無しさん
20/06/07 23:26:23 Zvt1FY8k.net
>>604
何が完成したのやら
レス番を貼るか概要を書いて貰わないとわからん

631:デフォルトの名無しさん
20/06/07 23:35:39.43 Zvt1FY8k.net
>>605
そのコード読むのが自分だけか複数人かでメンテしだいじゃ無いの

632:デフォルトの名無しさん
20/06/08 01:11:56 VAdCiuLB.net
>>598
確認した

変数で受ける以前の問題だな
DirとかいまだにUnicode対応されてないのか
だったら8.3形式で返せばいいのにな

633:デフォルトの名無しさん
20/06/08 07:02:43 upiiQwtH.net
>>608
ググるとFileSystemObject使えって書いてあるな

634:582
20/06/08 07:46:04 ACGXca97.net
>>609
でも、変数で受けちまうと何使っても?になっちまうよ。
それにFileSystemObjectのファイル列挙は糞遅かった筈。
特別な理由が無いならエラーで抜けちまって、特殊なファイル名には非対応とメッセージ出した方が良い気がする。

635:582
20/06/08 08:00:05.61 ACGXca97.net
>>603
少し住所を扱う処理を動かせば直ぐに気付くレベルの話だよ。
特にスペースなんて人名や住所以外でもよくある話。
全角だろうが半角だろうが""に変換しちまうのはよくやるだろう。
まあ、全角半角は数字とかアルファベットでも問題になるからその前に


636:StrConv使って統一するとかが普通の処理だろう。 ハイフンだって思いつくものはマイナスに変換する程度のことはする。



637:デフォルトの名無しさん
20/06/08 08:12:22 /JIEFRnW.net
むしろテキストボックスのEN_UPDATEでスペースやハイフンを消せば楽
郵便番号欄は数字以外受け付けないようにスタイル指定するだけでもいい

638:デフォルトの名無しさん
20/06/08 08:46:24.73 k1oezjz2.net
フォルダを指定し、そのフォルダ内の全てのブックの、各ブックのシート"sire"の2行目から最終行をコピーして
シートcompの最下行の一つ下に張り付けていき、I列に各ブック名を記入していくマクロを教えてください。
Sub comp()
'フォルダを選択
Dim path As String
Dim r As Long
Dim buf As String
Dim i As Long
Dim filename As String
Dim mysheet As Worksheet
Dim srcbook As Workbook
Dim srcsheet As Worksheet
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = 0 Then
MsgBox "キャンセルされました。"
Exit Sub
End If
path = .SelectedItems(1)
End With
Application.ScreenUpdating = False

639:デフォルトの名無しさん
20/06/08 08:47:00.39 k1oezjz2.net
続き
Range("A1").Value = "担当者"
Range("B1").Value = "行程1"
Range("C1").Value = "件名1"
Range("D1").Value = "行程2"
Range("E1").Value = "件名2"
Range("F1").Value = "行程3"
Range("G1").Value = "件名3"
Range("H1").Value = "期間"
Range("I1").Value = "グループ名"

Set mysheet = ThisWorkbook.Worksheets("comp")
Debug.Print myseet
buf = Dir(path & "\*.xls") 'フォルダ内の全ファイル名
Debug.Print buf
Do While buf <> ""
Set srcbook = Workbooks.Open(path & "\" & buf)
Set srcsheet = srcbook.Worksheets("sire")

640:デフォルトの名無しさん
20/06/08 08:47:32 k1oezjz2.net
続き
filename = 'srcsheetの拡張子なしのファイル名を取得

'シートの内容を2行目以降コピー
srcsheet.Range(Cells(2, 8), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 8)).Copy

'myseetの最下行の一つ下に値として貼り付け
mysheet.Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial xlPasteValues

'I列にそれぞれのファイル名を入力
For r = Cells(Rows.Count, 9).End(xlUp).Row + 1 To Cells(Rows.Count, 1).End(xlUp).Row
Range("I" & r).Value = filename
Next r

srcbook.Close False

buf = Dir()

Loop

Cells.EntireColumn.AutoFit

Application.ScreenUpdating = True

End Sub

641:デフォルトの名無しさん
20/06/08 10:43:42 pUpXY1nL.net
ワークシートの指定について

Activesheetだと動いて、worksheets(index)やworksheets("シート名")にするとプログラムが動かないことが多いのですが、何故でしょうか


下のようなプログラムを作りました。(Sheet2のA列の数字でSheet1にフィルターをかけて、pdf出力を繰り返す)

Sub Macro3()
For Each c In Worksheets("Sheet2").Range("A1:A68")
 i = c.Value
 a=1
 Worksheets(1).Range("$B$4:$N$6492").AutoFilter Field:=1, Criteria1:=i
 Worksheets(1).PageSetup.RightHeader = "   " & i
 r = Range("$B$5:$B$6492").Find(i).Row
 Worksheets(1).ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\Documents" & i & "." & Cells(r, 11).Value
Next c
End Sub


これを実行しても、フィルターがかからず、pdf出力メソッドの部分でエラーが起きます。
しかし、Worksheets(1) を Activesheetに直して、Sheet1をアクティブにした状態で動かすと正常に動きます。
イミディエイトウィンドウでWorksheets(1)が正しく指定されているかも確認しましたが、されていました。
一体何が原因なのでしょうか。

642:デフォルトの名無しさん
20/06/08 11:07:13 FM/y1B8a.net
>>616
入力ミスがないとして、この2箇所でシートの指定が抜けてるのが原因では
Range("$B$5:$B$6492").Find(i).Row
Cells(r, 11).Value

何度もWorksheets(1)を書くんじゃなくて、Forの外でActivateするかWithでSheet1を指定した方が間違いがなくていいと思う

643:デフォルトの名無しさん
20/06/08 11:07:50 F0/ca02L.net
workbookは指定してるの?

644:デフォルトの名無しさん
20/06/08 14:34:55.82 k7tLKOMH.net
アドインに記述されてるプロシージャを、シート上の図形をボタンにしてそこから走らせたいのですが、
引数を渡そうとすると、このブックでマクロが使用できないかすべてのマクロが無効なっている可能性があります、と出て実行できません
すべてのマクロを有効にしてもダメでした
引数なしの場合は、マクロが無効であっても、なんの問題もなく実行されます
登録は、'プロシージャ名 "引数"'とやっているのですが、マクロからそのままやると実行されますが、ボタンに登録すると実行されません
なにが問題なんでしょうか?

645:デフォルトの名無しさん
20/06/08 15:14:19 vAWoQ1cV.net
sub 引数なし()
引数あり "引数"
end sub

646:デフォルトの名無しさん
20/06/08 15:39:02.50 P+hhNSq/.net
なるほど・・・
結構な数のボタンになるので面倒ですが、ひとまずそれでやってみます

647:デフォルトの名無しさん
20/06/08 15:41:22.39 F0/ca02L.net
プルダウンなりなんなりで選ぶなりなんなりさせればいいじゃないなり

648:デフォルトの名無しさん
20/06/08 16:55:09.51 Fo3kuWti.net
イベント付きボタンのクラス作ればいいんじゃないのかな

649:611
20/06/08 17:50:20 k1oezjz2.net
srcsheet.Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 8)).Copy

のところが違うみたいです。どう書けばいいですか?

650:デフォルトの名無しさん
20/06/08 18:10:47 sSFxNrIu.net
シート名が抜けるの俺もむかーしよくやったわぁ
アクティブにすると直るんだよなぁw
何度やったか記憶にないぐらいやって痛い思いした

651:デフォルトの名無しさん
20/06/08 18:31:02.99 J+Lc8xxu.net
withで囲んでもドットを忘れてそれに気づかずいつまでもソースとにらめっこしたりな

652:デフォルトの名無しさん
20/06/08 18:52:12.93 d2CDqPLn.net
>>624
srcsheet.Range(srcsheet.Cells(2, 1), srcsheet.Cells(Cells(Rows.Count, 1).End(xlUp).Row, 8)).Copy
確証ないけど…

653:デフォルトの名無しさん
20/06/08 19:01:25.33 zqZQO86x.net
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Sh.Range("A:Z").Interior.Color = xlNone
If Intersect(Sh.Range("A:Z"), Target) Is Nothing Then
Exit Sub
Else '赤く色が変わる


654:列 Intersect(Selection.EntireRow, Sh.Range("G:Z")).Interior.Color = RGB(0, 255, 0) End If End Sub とにかく複数選択したセル行の特定の列を全部色付け 選択をやめると色が戻る(デフォルト)をやりたくて ThisWorkBookにこれを追記 で、なんとか希望の動きになったんですが これに1行目から7行目は除外(選択しても色が付かない) という条件の追加は可能ですか? 自分の知識じゃ無理ゲーですみません



655:デフォルトの名無しさん
20/06/08 19:48:40.38 58QwRa4M.net
>>628
一番最初に、ifステートメント入れれば良い。
if target.row >=8 thenとか。

656:611
20/06/08 20:15:16.49 k1oezjz2.net
>>624
ありがとうございますm(__)m

657:デフォルトの名無しさん
20/06/08 20:24:46.83 zqZQO86x.net
>>629
おおお、ありがとう理想の挙動に近づきました!
これだと12行目を選択した後にやめて
1行目を選択しても12行目の色が残っちゃうんだけどそれは回避不能ですか?
If Intersect(Sh.Range("A:Z"), Target) Isのところを
If Intersect(Sh.Range("A8:Z5000"), Target) Is
とかに変えても少し挙動が近づいた気もしますが、

658:デフォルトの名無しさん
20/06/08 20:28:42.90 pW+OOibM.net
構造体のメンバ変数を頭からindexで指定するようなことってできませんか?
for文で構造体のメンバ変数と配列とを順次比較したいんですが。

659:デフォルトの名無しさん
20/06/08 20:28:54.07 WKHI6Xr1.net
変数名やプロシージャ名を日本語で書くか否か迷ってます
日本語命名で困ったことが起こった人はいますか

660:デフォルトの名無しさん
20/06/08 20:30:33.47 ckk4P3me.net
>>631
少しは頭を使えよ、馬鹿

661:デフォルトの名無しさん
20/06/09 00:06:52.26 GDblTDVr.net
>>634
頭使ったらハゲるだろ、このハゲ

662:デフォルトの名無しさん
20/06/09 00:40:35.48 4DWGZxBT.net
ちょっとトンチンカンかもしれないですが
WindowsのエクセルのVBAって
LinuxのOpen OfficeのCalcでも使えたりするんでしょうか?

663:デフォルトの名無しさん
20/06/09 01:33:20.60 dgDUMn0q.net
>>633
あるぞ
英語環境しかないPCだと使えなくなる
人に送ったら面倒になった

664:デフォルトの名無しさん
20/06/09 03:31:53.35 eSuxcQl/.net
>>633
うちが英語とスペイン語環境しかなくて送られてきたVBAが動かなくて困った事が何度もある
日本人だからって日本語環境でやってるわけではない

665:デフォルトの名無しさん
20/06/09 03:41:28 eSuxcQl/.net
>>636
ExcelVBAはWinとMacでも違いがある
Win/Mac/Linuxで使えるOOoやLOのCalcで使えるVBAは制限やできない事があるけど一応使える

666:582
20/06/09 08:27:55.73 w8zDheKG.net
>>633
日本人にとってもコードが読みにくくてかなわん。

667:デフォルトの名無しさん
20/06/09 09:00:21.92 khiSZY25.net
>>633
会社で使うなら社内の自分より詳しい人に相談してみ

668:デフォルトの名無しさん
20/06/09 09:06:51.24 r/wULa9J.net
個人的には日本語プロシジャー名好き
処理名だと分かりやすい

669:デフォルトの名無しさん
20/06/09 09:38:40.07 rQkYVq9m.net
困った時のローマ字
Sub CSV_no_deTa_wo_rodo_suru()

670:デフォルトの名無しさん
20/06/09 09:49:38.68 r/wULa9J.net
そもそもシート名で日本語使ってるからね
気にするならそこからやらないとね

671:デフォルトの名無しさん
20/06/09 09:56:55.81 LXNCuYlO.net
>>633
単純に一つの言語で統一した方が読みやすい
これは一般的な文章でも感じられると思う
逆にコメント等を日本語にすることで注釈として意識させることが出来る
自分は実装には使わないテスト用のメソッドをを日本語名にする事はあるよ
アメリカに送ったら云々は条件が特殊だし、
日本語コメントも文字化けするんだから関係ないだろと思う

672:デフォルトの名無しさん
20/06/09 10:05:30 FZrbGc0Z.net
システムとして表示やコンパイルが可能かってのと、それを読む人間が外国語を理解できるかはまた別の話
とりまファイル名やワークシートに入ってるデータが日本語なら何も気にしなくていいってことよ
そもそも半角文字だって国によって割り当てが違うんだし

673:デフォルトの名無しさん
20/06/09 10:25:08.00 LXNCuYlO.net
いずれにしても海外環境で動くかって話になると、
関数名ひとつの話じゃないってことだな

674:デフォルトの名無しさん
20/06/09 11:06:11 GhLF46O3.net
>>642
自分はプロシージャ名だけでなく変数名にもときどき使ってます。
変数名を横文字で考え付くのが面倒ってこともありますが。
行や列の位置を示す変数に tate yoko の後は 行 列 縦 横 など。

675:デフォルトの名無しさん
20/06/09 12:07:12.66 GJCBYo9K.net
賛否両論(少し否優勢)な感じね
賛の中でもプロシージャ名、関数名、定数変数名のどこまで日本語が許されるかも派閥次第か

676:582
20/06/09 12:11:23 w8zDheKG.net
iとかなら良いけど変数の型とかプロシージャなのか区別出来る名前になってないと最悪。
で、日本語の名前つけてるのにそんなのが多い。

677:デフォルトの名無しさん
20/06/09 12:33:34.60 RJ9Fxau+.net
>>639
ありがとうございます

678:デフォルトの名無しさん
20/06/09 12:34:58.09 LXNCuYlO.net
変な事せずに命名規則に従った方がいいと思うけどね
メシマズ嫁と同じ思考回路だぞ

679:デフォルトの名無しさん
20/06/09 14:16:42.79 VHdLMKHt.net
すみません。どなたか詳しい方、ご指導願います。
データ計算をVBA作成しようとして悩んでいます。
リストボックスにある地名を選択して、テキストボックス1に数字を
入力したらテキストボックス2に対応した数値を出したいのですが
上手く書けません。
データシートのA列(A2からA300)には地名、横軸(B1からBG1)には整数値(50ずつの数値)があり
地名と整数値の交点には、それぞれ対応した金額が入っています。
またリストボックスの地名は「地名」として別シートを作成しています。
説明方法が悪くて申し訳ないのですが記述の方法の
解説を宜しくお願いします。

680:デフォルトの名無しさん
20/06/09 14:31:54.35 ksQUvwBH.net
h,vlookupじゃダメなんですか?

681:デフォルトの名無しさん
20/06/09 14:36:44.80 LXNCuYlO.net
どこまで書けてて、どこから分からないの?

682:デフォルトの名無しさん
20/06/09 14:38:50.34 XR5JAco5.net
XY座標のセル表示して終わりじゃないなら
ピボット勉強した方が良いと思う

683:デフォルトの名無しさん
20/06/09 14:49:37.66 VHdLMKHt.net
651です。
Private Sub ListBox1_Change()
ListBox3.Clear
Select Case ListBox1.Text
Case "東京都"
ListBox3.List = Worksheets("データ").Range("A2:A8").Value
(略)
End Select
With ListBox3
.ColumnHeads = False
.ColumnCount = 1
.ColumnWidths = "40;50;50"
.Font.Name = "Meiryo UI"
.Font.Size = 11
End With
End Sub
Private Sub TextBox2_AfterUpdate()
Dim TextBox2 As Range
Dim TextBox3 As Range
Set TextBox2 = Worksheets("データ").Range("A2:A13")
Set TextBox3 = TextBox2.Find(What:=TextBox2.Value, LookAt:=xlPart)
If Not TextBox3 Is Nothing Then
'ヒットした値をテキストボックスにセット
TextRegion.Value = Worksheets("データ").Cells(TextBox3.Row, TextBox3.Column + 8).Value
End If
End Sub
なんか変です。。。

684:デフォルトの名無しさん
20/06/09 14:54:09.61 VHdLMKHt.net
651です。
たぶんツッコミどころ満載です。
交点のセレクトできていません。

685:デフォルトの名無しさん
20/06/09 15:51:31.81 Hq8JX0Tk.net
なぜ段階を踏んで自分でテストモデルを組んでみないのかが疑問だわ
初心者の頃も含めてその程度の内容で誰かに聞いたことすらないわ

686:デフォルトの名無しさん
20/06/09 15:53:54.04 Hq8JX0Tk.net
1.リストボックスで選択してボタン押して他のフォームで項目表示できるか
2.テキストボックスに書き込んでボタン押して他のフォームのテキストボックスに表示できるか
3.リストボックスとテキストボックスで選択と書込をして同じフォーム上のテキストボックスに対応した数字を出せるのか

とかとか

687:デフォルトの名無しさん
20/06/09 16:19:22.27 ksQUvwBH.net
マクロの記録使うのはいいけど
その結果の意味ぐらい調べようよ
ググらなくてもF1キー押せば表示されるからさ

688:デフォルトの名無しさん
20/06/09 16:24:07 LXNCuYlO.net
>>657
下の関数内で使ってる変数名を具体的に書いてみたらどうかな
TextRangeForSearchTargetみたいな文章風でもいいから

689:デフォルトの名無しさん
20/06/09 17:05:07.59 /5vAUGTr.net
ユーザーフォームに
URLリンク(www.s-projects.net)
のサイトにあるような
位置度の算出を丸々搭載したいけど
素人にゃ厳しいですかね?

690:デフォルトの名無しさん
20/06/09 17:28:45 FZrbGc0Z.net
>>663
簡単

691:デフォルトの名無しさん
20/06/09 17:40:53.94 Hq8JX0Tk.net
ユーザーフォーム使ってTextBox1とTextBox2に数字いれてTextBox3に足し算の結果だすような基本をまず調べればあとは適当にぐぐりゃ分かるわな
計算途中も変数いちいち宣言して代入していくといいわ
自分で何やってんのか見失わないようにするため
Sub testttt()
Dim drawingX As Double: drawingX = 2
Dim drawingY As Double: drawingY = 2
Dim realX As Double: realX = 2.1
Dim realY As Double: realY = 2.1
Dim diffX As Double: diffX = realX - drawingX
Dim diffY As Double: diffY = realY - drawingY
Dim ResultPosition As Double: ResultPosition = Sqr(diffX * diffX + diffY * diffY) * 2
MsgBox ResultPosition
End Sub

692:デフォルトの名無しさん
20/06/09 17:54:43.46 AbQV9kr1.net
Private Sub TextBox1_Change() 'Xの図面寸法
TextBox3 = Val(TextBox1.Value) - Val(TextBox2.Value)
End Sub
Private Sub TextBox2_Change() 'Xの測定値
TextBox3 = Val(TextBox1.Value) - Val(TextBox2.Value)
End Sub
Private Sub TextBox3_AfterUpdate()'Xのズレ
TextBox3 = Val(TextBox1.Value) - Val(TextBox2.Value)
End Sub
Private Sub TextBox4_Change()'Yの図面寸法
TextBox6 = Val(TextBox4.Value) - Val(TextBox5.Value)
End Sub
Private Sub TextBox5_Change() 'Yの測定値
TextBox6 = Val(TextBox4.Value) - Val(TextBox5.Value)
End Sub
Private Sub TextBox6_Change() 'Yのズレ
TextBox6 = Val(TextBox4.Value) - Val(TextBox5.Value)
End Sub
Private Sub TextBox7_Change()
'位置度最難関
TextBox7 = Val(Sqr(TextBox3.Value) ^ 2) + Val(Sqr(TextBox6.Value) ^ 2) * 2
End Sub
tBox6.Value) ^ 2) * 2
End Sub
1~6まではぐぐったらなんとかできた
あとは7… >>665 ぐぐるより難しそうで無理す

693:デフォルトの名無しさん
20/06/09 17:58:28.74 AbQV9kr1.net
ああ、最後に変なコピペが混じってる
3と6にも多分式を入れないとだめですよね恐らく

694:デフォルトの名無しさん
20/06/09 18:02:48.17 AbQV9kr1.net
いや違う、むしろ7に入れずに3と6っぽい?
そもそもド素人にはやはり厳しいね
頑張りますわ

695:デフォルトの名無しさん
20/06/09 18:44:30.51 AbQV9kr1.net
うおぉ、浮動小数点かこりゃ?
どっかでroundで四捨五入せんといかんのね
1人であたふたすまん
ほんとムズい

696:デフォルトの名無しさん
20/06/09 19:24:04.57 Hq8JX0Tk.net
Changeイベントなんか使うから難しくなるわけで・・・・
そのサイトにあるように、ボタン押して計算するようなもの作りたいんだろ?
ならズレ角度抜きで、テキストボックス7個作って
ボタン押すと上の4個から数値拾ってきて下の3個に計算結果を入れるっていうな
イベント系はCommandButton1_Click()だけでいいはずだぞ

697:デフォルトの名無しさん
20/06/09 19:44:15.62 Hq8JX0Tk.net
Private Sub CommandButton1_Click()
Dim drawingX As Double: drawingX = TextBox1.Value
Dim drawingY As Double: drawingY = TextBox2.Value
Dim realX As Double: realX = TextBox3.Value
Dim realY As Double: realY = TextBox4.Value
Dim diffX As Double: diffX = realX - drawingX
Dim diffY As Double: diffY = realY - drawingY
Dim ResultPosition As Double: ResultPosition = Sqr(diffX * diffX + diffY * diffY) * 2
TextBox5 = ResultPosition
End Sub
URLリンク(i.imgur.com)
位置度だけだけど。
テキストボックスはIMEModeOffにしておく

698:デフォルトの名無しさん
20/06/09 19:49:22 0Bu4FXEm.net
なんでユーザーフォームってクソダサなんだろな
色変えられるんだしMicrosoftももうちょい気遣ってくれてもいいのにな

699:デフォルトの名無しさん
20/06/09 20:04:52.19 PO2SY+XL.net
>>671
天才ですか、、
何も知らん癖に自動にしたいかなぁと
思って検索してパクりまくって作ってましたわ
ズレ量も欲しいからとせっせと
小数点も3桁以上は四捨五入したく
1~4までは意味も分からずとりあえず
ちゃんと挙動してるかなぁレベル
アドバイス貰う以前の素人レベルだからスクショですんません
原理すらわかってない
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)

700:582
20/06/09 20:10:52.53 w8zDheKG.net
>>666
そういう書き方せずに>>665を具体的な値の部分は削除してまず関数化する。
Function GetResultPosition(drawingX As Double, drawingY As Double, realX As Double, realY As Double) As Double
Dim diffX As Double: diffX = realX - drawingX
Dim diffY As Double: diffY = realY - drawingY
Dim ResultPosition As Double: ResultPosition = Sqr(diffX * diffX + diffY * diffY) * 2
GetResultPosition = ResultPosition
End Function
初心者を脱っしていれば、点はユーザー定義にしてると思うけど、まあこんな感じ。

701:デフォルトの名無しさん
20/06/09 20:19:17 OFRsK1Sh.net
いつまで素人素人言い訳してくれくれする気だ

702:582
20/06/09 20:19:48 w8zDheKG.net
次にTextBoxの値を関数い代入する。
なお、TextBoxの名前もそれっぽく変えておく。
Sub test()
Dim drawingX As Double
Dim drawingY As Double
Dim realX As Double
Dim realY As Double

drawingX=txtDrawingX.Value
drawingY=txtDrawingY.Value
realX=txtRealX.Value
realY=txtRealY.Value

txtResult.Value=GetResultPosition(drawingX, drawingY, realX, realY)

End Sub

703:デフォルトの名無しさん
20/06/09 20:28:43.03 PO2SY+XL.net
ごめんスクショの所も直しきれてなかったし初心者を脱してないレベルだから
調子乗って挑戦しようと思ったのが間違い
測定値はどこまで小数点書こうが3桁で四捨五入
ズレ量も四捨五入された3桁で表示
四捨五入された3桁のズレ量同士で計算されて
位置度も3桁で四捨五入されてフィニッシュ
やろうとした事が多すぎました
普段のエクセルのSQRT関数入れたツールか
関数電卓で断念します
クレクレとかじゃなく、助言みんなありがとうです

704:582
20/06/09 20:51:16.65 w8zDheKG.net
>>677
四捨五入なんて最後で良いじゃん。
ResultPositionを四捨五入して返すだけだと思うが。
入力の見た目も四捨五入したいならそれぞれでやりゃ良いし。
どっちにしろ、四捨五入なんて考えずに作って、出来てから考えた方が良いぞ。

705:デフォルトの名無しさん
20/06/09 21:14:50.07 PO2SY+XL.net
>>678
どうも…事情がありまして
ズレ量と位置度を両方記入する必要があるから計算を合わせたいのです
そうしないと記入したズレ量と数値の計算が違ってくるので
なので普段はExcel関数ツール作ってで計算させてます

(名称はセル番地)
まず小数点7桁ぐらいで出力されてきやがるズレ量をRound関数で全て小数点3桁にする

小数点3桁同士で位置度の計算をさせる
=if(位置度="","",SQRT(SUMSQ(X実測値-X図面寸法,Y実測値-Y図面寸法))*2)

最後に出た位置度も小数点3桁にする
=if(位置度="","",Round(位置度,3)

位置度とズレ量を小数点3桁まで記入
現状これが自分の最善だったので…

706:デフォルトの名無しさん
20/06/09 21:21:13.62 PO2SY+XL.net
間違えた
小数点3桁同士で位置度の計算をさせる
=if(Xの実測値="","",SQRT(SUMSQ(X実測値-X図面寸法,Y実測値-Y図面寸法))*2)
2つ目はこうやった

707:582
20/06/09 21:24:41.76 kJxmgxZ3.net
>>679
いやいや、そういう話じゃなくてね、そんなもんは最後に入れれば良いでしょ。
先ずは四捨五入無しで動くところから。
あとTextBoxとかイベントとかも後でいいんだよ。

708:デフォルトの名無しさん
20/06/09 21:29:48.33 PO2SY+XL.net
>>681
ごめん、ほんと初心者以前知識すらない関数だけで凌いできたレベルでちょいネットで調べりゃ出きるかなと思ったらもう手つけられんのですわ
クレクレ以前の問題で
それでも
>>671のは頂こうと思うとります

709:デフォルトの名無しさん
20/06/09 21:37:07.98 /5vAUGTr.net
そういう業務と無縁だからエクセル関数で計算とかほとんど知らん俺からすると
そんな数式ほんとかよと思ったら
ほんとだった
それはそれでよく考えたもんだなおい
測定をする?部署は凄いね

710:デフォルトの名無しさん
20/06/09 21:38:09.42 khiSZY25.net
>>682
悪いことは言わんから早いうちに転職しなされ
こういう仕事向いてないよ

711:デフォルトの名無しさん
20/06/09 21:41:34.61 hYyeR2h+.net
プログラミングの基本も知らないレベルの人がコピペでツール作って業務に使用するって大丈夫なのか?

712:デフォルトの名無しさん
20/06/09 21:45:05.79 FZrbGc0Z.net
少数以下の計算結果を同じにするのは、Excelでは一番難しい分野の一つ
たとえば銀行の利息とか、素人が作った数式だとまず合わない

713:デフォルトの名無しさん
20/06/09 21:56:09.99 khiSZY25.net
この先も苦労するだろうし、もし重大な問題が起きた場合周りが迷惑するんだよな

714:デフォルトの名無しさん
20/06/09 21:59:00.39 I+ooWyO2.net
馬鹿に教えても何かあるとまた頼るだけ
馬鹿に教えてもろくなことにならんぞ
その場で形だけ低姿勢にしてるだけで本音は違うからな

715:デフォルトの名無しさん
20/06/09 22:01:59.19 0Bu4FXEm.net
より正確な計算するのってcurrency型だっけ?
double使うより

716:デフォルトの名無しさん
20/06/09 22:10:25 OFRsK1Sh.net
向き不向き以前に学習する気が無い

717:デフォルトの名無しさん
20/06/09 22:26:28.10 1rtAHViu.net
少数の計算はどの言語でやってもやっかい
なので普通は名の知れたライブラリを呼ぶ
自分で書くのは最後の手段

718:デフォルトの名無しさん
20/06/09 22:27:34.95 I+ooWyO2.net
>>689
違いがわからない馬鹿はコメントしなければ良いのに

719:デフォルトの名無しさん
20/06/09 23:36:40.87 KturEXme.net
スレチかもしれないけど他の方法も・・
>>653
VBA使わずにフォームコントロールのリスト選ぶだけで表示
URLリンク(i.imgur.com)
>>663
HTAのVBSciptで
URLリンク(i.imgur.com)

720:デフォルトの名無しさん
20/06/10 01:20:22 aAKpfJRW.net
学べない俺には刺さるわ、言い訳だが…
これだけは!っていう心臓部になるコードだけはネットで見つけて何とか繋げて作る
どこ弄ればどう変わるかだけ後で見ても絶対わかるようにコードより丁寧なコメントを残す
それさえ完成するともう安心して終わり

あとは簡単な挙動はテンプレがネットにあるからひろってくる
ユーザーフォームのボタンはで黄緑、黄色、水色を多用する
プロシージャ当てはめるだけで職場じゃパソコンの先生扱い

android端末やiPhoneの扱いならなぁ
近所でおばちゃまたちのスマホ教室を副業でやってるくらい詳しいのにっくそっ!

721:デフォルトの名無しさん
20/06/10 05:20:40.78 9S1ZPIsx.net
趣味や勉強中ならわかるが仕事頼んだら理解してないネットのコピペもって来るような人にはもう頼めんだろ

722:582
20/06/10 06:37:22 h6488s/K.net
>>682
そういう言い訳は良いから。
いつも思うことだが初心者はわざわざ問題を難しくする。

先ずは>>671の最後の
TextBox5 = ResultPosition

TextBox5 = Round(ResultPosition,3)
にするだけだ。

それに、TextBox1~4の3桁をど一にかしたいなら>>676を利用した方が簡単。
それぞれのchangeイベントで自分を3桁にした後で>>676のtest呼び出すだけ。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch