Excel VBA 質問スレ Part66at TECH
Excel VBA 質問スレ Part66 - 暇つぶし2ch483:デフォルトの名無しさん
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呼び出すだけ。

723:デフォルトの名無しさん
20/06/10 08:27:35.36 ZDdhDfGU.net
あいつは禿げたおっさんで体臭臭そうだけど、俺からみるとなかなか頑張ってると思うぜ
簡単な書籍買って一冊読んである程度まとまった知識得るといいわ
一年後にはここでふんぞりかえってレスしてると思うね

724:デフォルトの名無しさん
20/06/10 16:06:12.58 alb8qwRt.net
買った本開いたの最初だけで、今は枕になってるぞ

725:デフォルトの名無しさん
20/06/10 16:45:17.85 zxOaMDTC.net
>>698
メルカリへ

726:デフォルトの名無しさん
20/06/10 17:48:53.56 GhRRuhdi.net
>>698
くれ

727:デフォルトの名無しさん
20/06/10 20:30:18 O8L9L3qt.net
>>696
本当にありがとう。。言い訳やめて素直に全部頂いたら完成しました…
正直コードは何も理解しとらんですが…
URLリンク(i.imgur.com)

728:デフォルトの名無しさん
20/06/10 20:43:31 O8L9L3qt.net
なるほど、普段XとYの図面値が両方0な事も結構多い
そういうときはTextboxの1と3(XとYの図面値)のValueを0に設定しとけばいいのか
こういう事を本で基礎から学ばずスマホで調べて小ずるく終わらせるのが自分の学習性の無さ
、本当に駄目ですわ…
教えてくれた人への感謝と自分への落胆が酷い
もう生産部署に飛ばしてくれよ

729:デフォルトの名無しさん
20/06/10 21:27:00 r05FbU6w.net
フォームボタンを置いてそのシートで矢印押し続けるとセル移動が飛び飛びになるんだけど対処法ありますか?
とりあえずマクロ登録した図形にしたら発生しなくなったけど押した感ないから気持ち悪い

730:デフォルトの名無しさん
20/06/10 21:32:19 2cEQGA3C.net
>>701
理解する気が無いからな

731:デフォルトの名無しさん
20/06/10 21:34:24 2cEQGA3C.net
>>703
本当に飛び飛びになってるかカーソル位置をdebug.printとかで確認してみろ

732:デフォルトの名無しさん
20/06/10 22:01:15.35 zJ0W6AlK.net
>>704
そう、それがあかんわ
ちょいちょいと細かなとこばっか弄るくらいしかできない
とりあえず位置度の数値をアクティブセルに反映されるボタンを追加して完成です
失礼しました本当に

733:デフォルトの名無しさん
20/06/10 23:43:02.56 r05FbU6w.net
>>705
もちろん実際に移動が飛ぶわけではありません
表示上の問題です

734:デフォルトの名無しさん
20/06/11 02:06:11.07 l/gRHUK3.net
馬鹿はこうやって厚かましく聞きだそうとする

735:デフォルトの名無しさん
20/06/11 04:35:21 upd9DdGd.net
俺はあのおっさんはハゲで臭いけどできるやつだって思ってるわ
しゃちょーの器だ
頑張ったな、おっさん

736:デフォルトの名無しさん
20/06/11 05:50:14 p+d7/Y3X.net
>>708
質問スレで何を言ってんだ?

737:デフォルトの名無しさん
20/06/11 07:33:56.10 Ppd1dcd+.net
馬鹿って言いたいだけの人の相手しちゃダメ

738:デフォルトの名無しさん
20/06/11 12:31:19.92 9UX6mR7k.net
いや、学ばない俺でも流石にセルに反映されるボタンくらいは聞かずに作れたのでそこまでは聞いてないですよ
ボタンに
アクティブセルとテキストボックスのvalueを=の動きつけるだけだし

739:デフォルトの名無しさん
20/06/11 14:46:24.05 xmZccwT9.net
その「だけ」の組み合わせなんだよなぁ

740:デフォルトの名無しさん
20/06/11 15:47:31 fXLeDjMq.net
算数の問題で答えだけ合っていても計算式がないと正解にはならない
カンニングとみなされるって知らんのか
そうやって問題から逃げている初心者に教えることはない

741:デフォルトの名無しさん
20/06/11 15:50:35 fXLeDjMq.net
ちょっと言いすぎたかな

742:デフォルトの名無しさん
20/06/11 15:56:00.83 G1l0Tewu.net
いや、それでいいんだよ

743:デフォルトの名無しさん
20/06/11 16:13:44 HN+bic0j.net
エクセル初心者はVBAなんて触らんし
VBAやマクロ禁止の部署もあるからなぁ
パートさんには入力欄とクリックのみだったりとか
まー初心者がこのスレ見ることもないか・・

744:デフォルトの名無しさん
20/06/11 17:23:40.82 9UX6mR7k.net
いやもう完成しました
感謝もしたし謝罪もします
計算式はPCないところで関数電卓使ったりするから嫌でもわかっとります
√( xズレ^2+yズレ^2) *2
VBAでもまず覚えようと思ったので
Xズレ→B列 Yズレ→C列 位置度→D列のデータの時
Dim s As Long
Do While Cells(s, 3) <> ""
Cells(s, 4) = Sqr(Cells(s, 2) ^ 2 + Cells(s, 3) ^ 2) * 2   
Cells(s, 4) = Format(Cells(s, 4), "0.000")
s = s + 1
Loop
エンドサブちゃん
高卒には荷が重すぎ
高学歴でしょここの人達

745:デフォルトの名無しさん
20/06/11 17:29:15.93 /dMXe1DS.net
その言い訳がましいフレーズをレスに入れるから良くないって、今後は書き込む前に考えたほうがいいよ
ここはもう来なくてもいいから

746:デフォルトの名無しさん
20/06/11 17:34:53.28 Gg4t4WTy.net
俺は計算系は答えられんがここは質問スレだからどんどんこい。
煽ってるだけの奴は何の目的でこのスレにするんだ。芸能人の話題待ちでもあるまいし。
自分の決め事があるならいいけど初心者は変数は後でわかるようにとにかく宣言すべし。
日本語だけはあまりお勧めしない。

747:582
20/06/11 19:31:53.23 lwV9wV8Y.net
>>718
何で、そのループが必要なのかな?
あと、いきなりCellsで始まるのはあまり良くない。
ブックなりシートなりから書いた方が良い。
でも、それだと長くなるからWithやSetを使う。

748:デフォルトの名無しさん
20/06/11 20:34:47.38 upd9DdGd.net
特定の行・列を表示・非表示にするボタン使ってるんだけどさ
この行・列にActiveXの他のボタンがあったりなんかするこ、たまにこいつらが消滅するんだよなぁ
debug.printとかで位置確認すると確かにそこにいるんだけどHeight=0とかになってる
んで適当にSubプロシージャ作ってHeight=200とかに設定するんだけどだめ
ならない
エラーはかないけど、debug.printで確認してもぜぃろぉのまま
Deleteも効かない
てかエラー出る
オブジェクトの選択と表示からみると存在してる
再起動してもだめ
てかたまに開けなくなるw
しゃーないから、新しいシート作って、そこにシート全選択でこぴぺすると
表示されてるボタンはコピーされるが
消滅したボタン群だけはコピーされない
コピーされないってのは、オブジェクトの選択と表示にそいつらが出なくなることから判断してる
消えたやつは新しく作り直してる
まぁそうすると元に戻るんだけどさ
なんだか半分死んでて半分生きてるような感じなんだろうなぁ
お前らこういうことある?

749:蟻人間
20/06/11 20:43:48.25 9OB4DptL.net
ActiveXはサポート終了でしょ

750:デフォルトの名無しさん
20/06/11 20:47:39.72 upd9DdGd.net
だってぇ・・・右クリで移動されちゃうボタンとかいやだもん

751:デフォルトの名無しさん
20/06/11 21:20:07 v1OJq4JH.net
Active S○X

752:デフォルトの名無しさん
20/06/11 21:49:44.43 Pc/1Hill.net
txt123 = objIE.document.all.tags("table")(2).outerText
でテキストを取得しました。
txt123 の中に授業表が入っています。
体育という単語が含まれていれば、A列のセルに〇、国語という単語が含まれていればB列に〇、
算数はC列・・・
という具合に特定の文字列が含まれていれば指定の列のセルに〇を入れたいのですが、
どうしたらいいでしょうか?
特定の文字列は国語、算数、体育、社会、理科の5つです。

753:デフォルトの名無しさん
20/06/11 21:52:07 DFKeKDYT.net
>>726
馬鹿は死ねば治るかもよ

754:蟻人間
20/06/11 21:55:51.11 fTevQdJs.net
>>726
文字列を検索する関数とIf文を使えば?

755:デフォルトの名無しさん
20/06/11 22:00:18.32 vUhEmjDF.net
>>726
こんなこともわからない頭の悪い奴に教えられる子供がどうなるか

756:デフォルトの名無しさん
20/06/11 22:05:40.83 S8xfnPZH.net
>>726
色々無理だと思うぞ。やめとけ。

757:デフォルトの名無しさん
20/06/11 22:28:34 Pc/1Hill.net
>>728
ありがとうございます!
If InStr(txt123, "国語") > 0 Then
こんな感じに値が返ってきたら〇と入力する仕組みになりました

758:デフォルトの名無しさん
20/06/11 23:19:34.07 fXLeDjMq.net
まさかと思うがテキストボックス123個とか作ってるんじゃないよな

759:デフォルトの名無しさん
20/06/11 23:44:22.39 52kheZTp.net
何でそれでいきなりIE制御・・・。

760:デフォルトの名無しさん
20/06/12 00:13:44.58 Y0E/tOto.net
授業表をIEで見るって社内システムがそれなのか?

761:デフォルトの名無しさん
20/06/12 00:33:39.25 cWAZHeBV.net
IE制御とかレガシーにも程があるだろ。。

762:デフォルトの名無しさん
20/06/12 00:43:49.91 V6O8I1+o.net
WebページのテーブルってエクセルのVBAで
IE以外にどうやって取得するの?

763:デフォルトの名無しさん
20/06/12 01:56:00.71 MW3IhN88.net
test

764:デフォルトの名無しさん
20/06/12 02:10:15.74 MW3IhN88.net
選択した範囲のセル色を変えたいです。
If Intersect(Target, Range("B1:B5")) Is Nothing Then Exit Sub
色変更処理
変更可能なセルはB1:B5のみとしたいですが、
これだとB6が一緒に選択されている場合に一緒に色が変更されてしまいます。
B1:B6を囲ってしまった場合でも、B1:B5までの色のみ変更させたい場合どうしたらいいでしょうか。

765:デフォルトの名無しさん
20/06/12 02:51:45.45 KALz8/u9.net
また馬鹿か

766:デフォルトの名無しさん
20/06/12 03:29:37 IFmaagGk.net
>>738
選択した範囲は選択されているのか?

767:デフォルトの名無しさん



768:age
>>738 intersectした結果とTargetを比較したらいけないかな



769:デフォルトの名無しさん
20/06/12 07:59:23 d1Ad7gfn.net
>>722
シートに配置したボタンでよく遭遇するよ。そんなもんだと思ってるから、ボタン押下時のコードに自分自身の位置とサイズを初期化するコードを書くようにしてる。

770:デフォルトの名無しさん
20/06/12 08:22:21 F5wzc1/2.net
>>739
分からないからそれしか言えないのか?

771:582
20/06/12 08:32:29.25 KgwnUKnv.net
>>736
俺が知ってる方法で4~5種類の方法がある。
MSXMLとかWinHttpとかhtmlfileとか。

772:582
20/06/12 08:34:43 KgwnUKnv.net
>>722
どっかのリボンにオブジェクトのリスト出せるボタンが有ったと思うが、表示されなかったっけ?

773:582
20/06/12 08:36:08 KgwnUKnv.net
>>742
サイズ変わって見えなくなってるだけだよなあ。

774:デフォルトの名無しさん
20/06/12 12:46:47.02 HqN3pHW3.net
>>722
セルにあわせて移動やサイズ変更するかどうかの設定があったはずだが

775:デフォルトの名無しさん
20/06/12 13:13:42.59 1+2Rgw6z.net
>>747
バージョン2010以降「セルに合わせてサイズ変更や移動しない」の設定になっていても
サイズが変わってしまう事例を多数経験しています。(2007は経験なし)
ボタンだけでなく、コメントの位置も極端に移動すること多数。

776:デフォルトの名無しさん
20/06/12 13:14:30.95 hxFv/xna.net
>>744
ヘェ~そんな関数あるんだ、IEオブジェクトだけかと思ってた、ありがとう

777:デフォルトの名無しさん
20/06/12 17:49:02 aQA9YYrW.net
>>742
エクセルに任せるんじゃなくてコード上で配置の指示だしておくってのは解決策になるのかもしれんね。ちっこくして非表示切り替えと関係ない安全な場所に退避させておくみたいな
>>745
それが「オブジェクトの選択と表示」
リストには出てるんだわ
>>747
まぁその辺もやってるんだけどね
むしろその辺でバグってるんだと思う
>>746
おれの書いた内容読んでないのかもしれんけど
VBAからサイズを再指定して表示させようとしてもバグってて指定を受け付けてくれないってことな
そもそもサイズの問題だけならシートコピーで他の正常なボタンと一緒にコピーされるはずじゃん

778:デフォルトの名無しさん
20/06/12 23:01:56.39 FlbnSBZd.net
Windows10に変えたら、クロマキー合成みたいなのが出来なくなっちゃったんだけど、
何か方法ない?

779:デフォルトの名無しさん
20/06/12 23:29:11.20 KALz8/u9.net
また馬鹿が来た

780:デフォルトの名無しさん
20/06/12 23:57:17 FlbnSBZd.net
>>739
>>752
一体どんな無様な人生を送ったら、そんなコメントが出来るようになるのかな?
生きててつまんないだろう?
ここの住人にかまってもらえるのが唯一の楽しみかい?

781:デフォルトの名無しさん
20/06/13 00:29:59.36 0QXppYe5.net
クロマキーはWin7まで。
ていうかクロマキーて・・。
確かにクロマキーだが。

782:デフォルトの名無しさん
20/06/13 01:18:01.22 l5EmusQW.net
一旦あきらめて、真の目的を違う方法で達成することを考えましょう

783:デフォルトの名無しさん
20/06/13 03:31:14.05 d/IEOBZf.net
>>753
自分が言われたという自覚があるんだ?

784:デフォルトの名無しさん
20/06/13 06:33:26.28 iOfV/qX/.net
>>752
実は自分もわかってないからここで勉強してるんだろ
でマウント取りたいからそのコメント

785:デフォルトの名無しさん
20/06/13 07:35:38 gm1IvgiV.net
質問スレなんてどこでも、マウントとって承認欲求を満たそうとする奴らばかりだよ。
特にVBAスレは、プログラミング板の他のスレでは相手にされないレベルの奴がここなら俺でもマウントとれるだろと集まってくる。

786:デフォルトの名無しさん
20/06/13 10:49:08.95 hwBvm+CU.net
VBA始めて1週間
結構できるようになったけど、俺ってすごい!?

787:デフォルトの名無しさん
20/06/13 11:02:28 iOfV/qX/.net
>>759
どうやって勉強した?どこまでできるようなった?

788:デフォルトの名無しさん
20/06/13 12:54:09.65 l5EmusQW.net
VBA完全に理解した

VBAなにもわからない

VBAチョットデキル

789:デフォルトの名無しさん
20/06/13 13:53:12.35 sXc2xmOg.net
何を以て「できる」と判断したのか?

790:デフォルトの名無しさん
20/06/13 13:57:01.18 k9PzEFx9.net
初心者の頃に書いたコードみるとマジナンだらけでチョベリバだわ

791:デフォルトの名無しさん
20/06/13 14:05:41.14 GFk/ON+H.net
編集ができるってことじゃね

792:デフォルトの名無しさん
20/06/13 14:17:20 Ft3NByW3.net
 ダニングクルーガー効果とかいうやつじゃね

793:デフォルトの名無しさん
20/06/13 15:41:58.59 9rN9x/HV.net
VBAに限らないコーディング全般の話になるかと思うんですが、
For文のカウンタ変数に対してそのブロック内で加減算するのはいわゆる「お行儀が悪い」ものですか?
For i = min To min Step -1
  For j = i + 1 To max
    ~処理~
    If 条件 Then
      ~処理~
      Let i = i + 1 '←ココ
      ~処理~
    Else
      ~処理~
    End If
    ~処理~
  Next j
  ~処理~
Next i
前任者が使っていた20行にも満たないコードですが、1行目に違和感がありました。
Do While/Until文で書き直せるものの、単に自分の理解度が低いだけかもしれず・・・

794:デフォルトの名無しさん
20/06/13 15:59:50.04 sXc2xmOg.net
>>766
俺ならforにしないな

795:デフォルトの名無しさん
20/06/13 16:03:06 hwBvm+CU.net
データ用のシートからデータをコピーできるようになったぜ

ところでクラスモジュールにはどんなメリットがありますか?
functionの意味は分かりましたが、クラスとの違いなどがよく分からず
今本屋で色々探してきましたが、解説が見当たりませんでした。

796:デフォルトの名無しさん
20/06/13 16:04:33 HDBeOIwd.net
>>766
forにせずif文で条件抜けさせる方が読み手に伝わるし良いと思う…
stepで減算してるのに条件次第でi加算するのは処理の流れが分かりづらくなる

797:デフォルトの名無しさん
20/06/13 16:05:08 ll49+YlL.net
一般的に、for nextの方が理解しやすいから、for 文ありきで書いてるだけなんじゃないかな。
感覚的にも可読性やメンテナンス性からも、do loopなどで書く方が良いと思います。

798:デフォルトの名無しさん
20/06/13 16:14:12.41 lPN2rvMv.net
>>768
VBAのクラスはCOMとの相互運用のために存在する
普通に使う分には全く必要ない
というか並のVBAerのスキルではメンテ不能になるからむしろ有害
クラスを使いたくなるレベルの高度な抽象化が必要になるようなら、
そもそもそんなことをVBAでやらなければならないシステム設計が間違っていると考えるべき

799:デフォルトの名無しさん
20/06/13 16:49:04 9rN9x/HV.net
>>767, >>769-770
やはりそうですよね。Do~に書き直そうと思います。ありがとうございました。

800:デフォルトの名無しさん
20/06/13 16:50:17 hwBvm+CU.net
>771
ありがとうございます。
そこまでの説明が探しきれなかったので助かります。

801:デフォルトの名無しさん
20/06/13 16:52:28 69sGe9cG.net
>>766
Forの使い方を間違ってる
途中で1足して、最後にまた1引くんなら、Do LoopとIfなどを使って条件をはっきり書くべき

プログラミング全般の話となると、コンパイラによっては最初にStep値で割り算して回数を求めてしまうコードを吐くやつもあるので、正常に動かなくなる

802:デフォルトの名無しさん
20/06/13 18:20:23.36 gmb5Wcnr.net
ブックのなかに、シートがたくさんあって、
マクロ利用者毎にマクロで動かしたいシートが違う。
だから、マクロの実行中に、利用者にシートを選択させて、それをactivesheetにさせたい。
そういうの、できる?

803:デフォルトの名無しさん
20/06/13 18:31:43.88 sXc2xmOg.net
できる

804:デフォルトの名無しさん
20/06/13 18:35:00.95 Q06gyfKt.net
>>775
ロジック的に変
Webページやスマホアプリでも最初にログインするのとかあるでしょ?
後から選択するくらいなら最初に分けた方が良いのでは?

805:デフォルトの名無しさん
20/06/13 18:38:57.44 gmb5Wcnr.net
>>777
できれば、そうしたんだけど。
何人もの利用者が共通で使っているブックなので、シートを分けられないんだ。
シートがゴチャゴチャの状態から特定シートを利用者に選ばせたい。

806:デフォルトの名無しさん
20/06/13 18:42:11.92 ejIEXNUq.net
>>775
URLリンク(qiita.com)
この辺コピペしたら動くんじゃない?

807:デフォルトの名無しさん
20/06/13 18:54:40.10 Q06gyfKt.net
>>778
ごめん参りました_| ̄|○>>779

808:デフォルトの名無しさん
20/06/13 18:56:13.87 gmb5Wcnr.net
>>779
回答サンクス。
でも、もっとコードをシンプルにしたい。

809:デフォルトの名無しさん
20/06/13 18:56:56.64 gmb5Wcnr.net
>>781
マクロを途中で止めて、利用者にシートを選択させることによって(そのシートのどこかのセルを選択させる)、activesheetにさせたいんよ。

810:デフォルトの名無しさん
20/06/13 19:11:25.34 Ft3NByW3.net
自分でシートを開いてその後マクロを実行する形じゃダメなの

811:デフォルトの名無しさん
20/06/13 19:20:55 gmb5Wcnr.net
>>783
今は、苦肉の策でそうしてるんだけどね。
諸事情により途中でactivesheet を選ばせたいんだ。

812:デフォルトの名無しさん
20/06/13 19:50:08.25 mObNCAEc.net
これでいい気がする
URLリンク(qiita.com)

813:デフォルトの名無しさん
20/06/13 20:02:21.69 gmb5Wcnr.net
>>785
サンクス
ありがとー。
でも、もっと簡単にできんかな。
どうやら、無理っぽいな。


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