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


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

Excel VBA 質問スレ Part77



1 名前:デフォルトの名無しさん mailto:sage [2022/07/17(日) 07:07:35.59 ID:tS4zKdphH.net]
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

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

次スレは>>980が立てること
無理なら細かく安価指定

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

411 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 15:14:31.63 ID:EMP5KmCeM.net]
>>408
まず問題を分割しよう
まず(step1)日別にレコードを分割し、(step2)それを日付でグループ化して合計を出すと考えればいい
step2は典型的なグループ化と小計なんで楽勝として、step1はちょっと面倒だから更に分割しようか
例えば、入力として一行の内容を渡すと、日別分割されたレコードの配列を返す関数を作って、その結果を結合すればいいだろう

412 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 15:53:00.45 ID:XgHMEnCRd.net]
>>405
深く考えなくていいなら
①2つの表(シート)をそれぞれ参照して作業用のシートAを作る
コード シート 値
101 A 50
102 A 40 
・・・
101 B 60
102 B 100
②シートAをソートする
③シートAの内容を読み込んで質問にあるようなシートBを作る

413 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 16:12:23.70 ID:EfwMa2qS0.net]
できた!
二重ループでできました。

414 名前:411 mailto:sage [2022/08/18(木) 16:21:20.45 ID:fCi7ElhaM.net]
日別分割関数について補足しておこう
この関数を更に分割すれば、下記のようになるだろう
(1) 開始日時と終了日時の間の日付を全て取得する
(2) 終了日時と開始日時の差を時間単位で求め、結果をHとする
(3) (1) で取得したそれぞれの日付(dとする)について、下記を実施する
(3.1) 開始日時と終了日時の間において、日付dに属する時間が何時間あるかを計算し、結果をhとする
(3.2) 消費量*h/Hを計算し、結果をxとする
(3.3) 日付dと消費量xのペアを分割結果の1レコードとする

ここまで分ければ簡単だろう。もしまだ難しければこのように適宜分割するとよい。

415 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 16:23:33.57 ID:MNMwm62Z0.net]
初歩的な質問なんだけど、上下一致してる場合だけ転記して行くという場合

1行目は例外として省く処理いれて
cells(r-1,1)=cells(r,1)とかってやってくと、不一致のものが現れた時に一致してた行の最初の値が転記できなくなるんだけどどうしたらいい?

100
100
101
101
102

とかって並びの時に、100の一番上が転記されないとか
102とかも転記されない
上下比較の時の最適解の比較方法を知りたい

416 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 16:23:56.43 ID:X/mZUHYK0.net]
>>405
結構面倒、前提条件として「表A, 表Bのコードは各々ソートされてる」かつ「表A, 表Bのコードは各々の表内で重複してない」のであれば...
Type T
S As WorkSheet: L As Long: R As Long: C As Long: D As Long: F As Boolean
End Type

Dim TA As T, TB As T
Set TA.S = WorkSheets("表A"): Set TB.S = WorkSheets("表B")
TA.L = TA.S.Cells(TA.S.Rows.Count, 1).End(xlUp).Row: TB.L = TB.S.Cells(TB.S.Rows.Count, 1).End(xlUp).Row
TA.R = 1: TB.R = 1
TA.F = False: TB.F = False
Dim S As WorkSheet: Set S = WorkSheets("結果")
Dim R As Long: R = 1
Do
G TA: G TB
If TA.F And TB.F And TA.C = TB.C Then
S.Cells(R, "A").Value = TA.C: S.Cells(R, "B").Value = TA.D: S.Cells(R, "C").Value = TB.D: TA.F = False: TB.F = False
ElseIf (TA.F And TB.F And TA.C < TB.C) Or (TA.F And Not TB.F) Then
S.Cells(R, "A").Value = TA.C: S.Cells(R, "B").Value = TA.D: TA.F = False
ElseIf (TA.F And TB.F And TB.C < TA.C) Or (Not TA.F And TB.F) Then
S.Cells(R, "A").Value = TB.C: S.Cells(R, "C").Value = TB.D: TB.F = False
Else
Exit Do
End If
R= R + 1
Loop

Private Sub G(T As T)
If Not T.F And T.R <= T.L Then
T.C = T.S.Cells(T.R, "A").Value: T.D = T.S.Cells(T.R, "B").Value: T.F = True: T.R = T.R + 1
End If
End Sub

417 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 16:34:05.48 ID:EfwMa2qS0.net]
>>416
ありがとぅざいます!
そうなんです
考え出したらこれかなり面倒だなと思って、、

同じような発想かもしれないですが

外のループはA表のコード番号の縦列の値を固定して、
内側ループでB表を縦にコードが一致するまで検知して
一致した場合フラグを立てて、一致したコードの時は一致してるコードの隣に値を転記。
内側ループを抜けた時点でフラグが立っていない場合はBにしか存在しない値なので、A表の最終行以降に転記

って考え方でいけました!

418 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 16:37:32.42 ID:EfwMa2qS0.net]
あ.A表に転記ではなくてC表ですね

419 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 18:49:57.27 ID:AeknNWbaa.net]
>>411,414
ありがとうございます、そのヒント元に自己解決できました

1. 対象となる期間を配列に格納
2. データを1つずつ0:00で分解、按分は都度[その日の時間/全体の時間]で実施
3. 配列内の一致する日付に割振り
4. 2-3ループ



420 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 20:46:21.25 ID:JMDQexcx0.net]
>>415
102は一致する相手がいないけど、転記される必要があるのかな?
ぱっと思いつくのは

ポインタをrとsの2つを用意してr=1, s=1から始める
1. Cells(s, 1) == Cells(r, 1) の間だけ s を進める。
2. Cells(s, 1) の値が変わったところで
a) s - r > 1 なら Cells(r, 1) を転記しながら s に追いつくまで r を進める
b) s - r == 1 なら転機せずに s に追いつくまで r を進める
3. 1からの手順を表の最後まで繰り返す

421 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 22:39:41.60 ID:MNMwm62Z0.net]
>>420
相手がいない場合も転記です
そのやり方試してみます
単純そうでむずかしい…

422 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 01:11:58.45 ID:OSKKwF+I0.net]
>>415
そこからどういうデータを求めたいんだ?
単に重複データ削除するだけで良い気がするんだが

423 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 07:58:47.24 ID:YEGDOEOJ0.net]
>>422
上下一致してるものだけ足し込んでいくということをしたいです
一致してなくても一個だけのはそのまま転記したい
空白は無視で
単純なコードでいけるかなと思ったら難しくて、、

424 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 09:33:47.59 ID:TD6yT77i0.net]
まずどういう出力か書けよ
頭悪すぎだろ

425 名前:デフォルトの名無しさん [2022/08/19(金) 10:55:40.42 ID:agk3kSn7p.net]
>>424
>>423で説明すているだろ
これで分からないってお前白痴か?

426 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 11:00:49.57 ID:0SH6JCsd0.net]
>>415の入力例で言うと
100は上下で一致してるから転記する
101は上下で一致するからこれも転記する
>>421の説明だと102単独でも転記する
転記しない入力例ってどんなのよ?

427 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 11:05:43.32 ID:nezaNaBad.net]
423の足しこんでいくというのは?もう何もわからない

428 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 11:07:12.98 ID:nezaNaBad.net]
転記?今日の天気?
Excel必要ですか

429 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 11:32:50.63 ID:LZdSBpbV0.net]
うるせえ!この禿!



430 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 13:14:47.90 ID:aeNJth6k0.net]
まず髪の毛緑に染めてこい

431 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 13:37:04.21 ID:NSoYBxeid.net]
質問する側がおかしいと(どういう結果にしたいかが不明の場合)回答する気も失せるよね上下一致と言われたら
A
B
C
D
ならBを基準にA=BかつB=Cって自分はするんだが違うんだろ?

432 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 16:42:31.05 ID:TM0tepDc0.net]
重複除去したいって解釈してた

433 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 17:14:26.61 ID:OSKKwF+I0.net]
>>423
最終的に欲しい形を書け

エクセルの機能に重複データの除去ってあるのはしってるのか?

434 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 19:41:03.51 ID:LZdSBpbV0.net]
知らないのでわ?

435 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 19:54:20.05 ID:fs7pDiUMd.net]
足しこむとか転記とか何がしたいか意味不明なんだよね
単純にいま記載されている列の値について
1.同じ値が続く場合は最初の一つだけ残す
2.ただし途中にある空白は無視する(1、空白、1は同じ値が続いてるとする)
3.最終的に残した値で詰める または 残した値は別の列なりシートなりに転記する
みたいな事をやりたいのか質問見ただけではわからんのよね
この場合なら検索する行とセットする行を用意すれば簡単にできる話なんだけどね
仕事もそうなんだけど説明が下手な人ってやっぱり仕事もできない人が多い

436 名前:デフォルトの名無しさん mailto:sage [2022/08/19(金) 20:23:56.98 ID:uBoRK/pGd.net]
足し込むというのが加算という意味であれば必然的に数値ということになるけど、、、

上の行と同じ数値なら足し算する=2倍するってことか?
それとも上と下の行が同じ数値なら現在行と上下の3行の和にするってことか?

なんかいろんな解釈ができる要望なんよね。。。

437 名前:デフォルトの名無しさん [2022/08/19(金) 22:10:12.43 ID:zQKwV5nn0.net]
まぁ重複したデータを足し込むのか削除するのかはさした問題ではない。
ディクショナリやコレクションに元にあった値をキーにして
まずキーと同じ値をキーに該当する値として設定して、
同じキーが次回来たときに無視するか足し込むかすればいいだけの話だからな
最後にそれをシートに展開すればいいだけの話。
そうしとけば足し込もうが重複削除だろうが簡単に対応出来る。
SQLを知っているならSQLでやってもいい。

問題は同じ値が飛び石で来る可能性があるのかということ。
例えば101、101、102、101の順序で来ることがあるのか?
この場合、要件としては「上下で一致しているものだけ足し込む」ということなので上の例で言えば202、102、101と設定されるのが正ということになる。
これは上記した方法でやるのはかえってまどろっこしい。
そうしたら上から舐めてコレクションに値を格納、前回の行と次の行の頭が同じなら無視するか足し込むかすればいいし、値が違うならそのままコレクションに追加すればいい。
最後にそれをシートに展開する。

このように同じ数値が飛び石で来るかで作りがガラッと変わってしまう。せめてそこだけでもハッキリさせてくれれば。

438 名前:デフォルトの名無しさん mailto:sage [2022/08/20(土) 00:10:31.82 ID:KYv4qV6Cd.net]
もう終わった話なんだと思うけど正直質問する人はこういうデータをいじりたいという事は伝えても
結果としてこういうものが欲しいっていう事を伝える人が少ないんだよね
だからいろんな解釈ができるからその辺もちゃんと情報を伝えてほしいわ

439 名前:デフォルトの名無しさん (ワッチョイ ffda-tEjH) mailto:sage [[ここ壊れてます] .net]
そういうの含めて個人の能力



440 名前:デフォルトの名無しさん mailto:sage [2022/08/24(水) 18:51:09.99 ID:VyM585LM0.net]
Unique関数の引数って二次元配列じゃないとだめなの?

441 名前:デフォルトの名無しさん [2022/08/24(水) 19:20:17.01 ID:lK4e5BLcM.net]
Range型を渡すんじゃダメなの?

442 名前:デフォルトの名無しさん [2022/08/24(水) 20:13:49.71 ID:LO0U8Jrb0.net]
実際に試してみれば答えが出ると思うのだが

443 名前:デフォルトの名無しさん (ワッチョイ 1fce-tEjH) mailto:sage [[ここ壊れてます] .net]
マニュアル読め

444 名前:デフォルトの名無しさん (ワッチョイ 9fda-iK0u) mailto:sage [[ここ壊れてます] .net]
MSヘルプですね~

445 名前:デフォルトの名無しさん [2022/08/28(日) 22:27:57.16 ID:uLwcj+rg0.net]
excel2019
win10

設定シートに各項目を入力させたらそれに応じて別シートに計算結果を入力させるVBAを書いてる途中なのですが、
VBAソースを書いてる途中に設定シートにこんな数値も持たせたい、
入力画面のレイアウトをあれこれ変えたいと行や列の挿入をしたくなってしまうのですが
そうするとVBAソースの方がずれたままになってしまうのですが、シートに挿入をしたら
それにともなって既にかけている部分だけでもソースコードのcellsやrangeの値が更新されてくれたりしないでしょうか?

446 名前:デフォルトの名無しさん [2022/08/28(日) 22:36:45.40 ID:bZvgSFoz0.net]
>>445
参照先は自動更新されない
セルに名前を付けてその名前で参照すればよい

447 名前:デフォルトの名無しさん [2022/08/28(日) 22:37:28.82 ID:z6hd8oqM0.net]
名前付きセル範囲
https://thom.hateblo.jp/entry/2016/07/08/001933

448 名前:デフォルトの名無しさん mailto:sage [2022/08/29(月) 20:34:19.97 ID:6xba6Hkk0.net]
おまいらが毛がどうのこうので喜ぶがらマジで頭ツルッツルにしてきたぞ

449 名前:デフォルトの名無しさん mailto:sage [2022/08/29(月) 22:48:42.98 ID:Qu5uun0od.net]
>>445
コレクションに格納するのが攻守最強



450 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 02:50:20.75 ID:Ie2cpGsY0.net]
>>449
そのコレクションの中身はどうやって保守するのかね?

451 名前:デフォルトの名無しさん [2022/08/31(水) 19:22:22.41 ID:QCzzbP6t0.net]
>>448
ツルツルがいいのは下の毛です

452 名前:デフォルトの名無しさん mailto:sage [2022/08/31(水) 22:52:05.08 ID:q/z2hnkB0.net]
>>451
お、おうw
しかし真夏にはツルッツルもなかなか良いわ涼しい

453 名前:デフォルトの名無しさん [2022/09/01(木) 03:46:18.56 ID:Xg3rwxDQ0.net]
win10
excel2019

Sub y()
Dim st As Range
Set st = Worksheets("参加者").Range("A1:BA80").Find(What:="氏名")
If st is Nothing Then
else
Debug.Print st.Row
end if
End Sub
これをすると"氏名"文字列に一致したセルがrangeオブジェクトで貰えますけど
本当に欲しいのは氏名のx個下のrangeオブジェクトなのです。
氏名のセルと参加者の開始セルの相対位置は固定的です。
氏名はいろいろな名前があるのでマッチングしづらいので氏名で位置を探って取り込んでいます。

rowやcolumnくらいしか使いませんけど、すっきり感としては本当に欲しいのは氏名の開始セルのrangeオブジェクトなのです。

返り値のrangeオブジェクトをずらすということはできますでしょうか?

454 名前:453 mailto:sage [2022/09/01(木) 03:53:25.83 ID:Xg3rwxDQ0.net]
Set st = Worksheets("参加者").Range("A1:BA80").Find(What:="氏名").offset(1,1)
こんな感じで解決しました。
動いてるのはまぐれでしょうか?

455 名前:デフォルトの名無しさん [2022/09/01(木) 06:49:22.79 ID:UMivoEC40.net]
>>453
何やってるかわからんままコピペして動かしてる感をヒシヒシと感じるので
Rangeオブジェクト
Findメソッド
Offsetプロパティ
について理解できるまで解説サイト読んでください

あと、>>445についても回答付いてるんだからなんかリアクションしてください

456 名前:デフォルトの名無しさん [2022/09/01(木) 09:42:20.83 ID:wgtUDrt5a.net]
451
おまわりさんこいつです

457 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 10:01:37.99 ID:Ak8bAeS9M.net]
VIO脱毛する人が増えてる

458 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 10:51:28.10 ID:Xg3rwxDQ0.net]
>>455
何度か書き込もうとしたんですけど、書き込みエラーになってしまっていました。
なんだかレスアンカーが不正とか出てきてたのでわからなくなりました。
レスアンカーをつけちゃいけないみたいな制約?

>>445に回答いただいた方ありがとうございました。
これも書き込めないかもしれませんが。

RangeオブジェクトのOffsetメソッド?は結合セルがやっかいなのですね。
結合セルでない時のエラー処理を加えると結局コードが汚くなっていくジレンマでした。

オブジェクト型がなかなか理解できません。
dim wf as object
set wf = worksheetfunction
とやってもwf.でエクセル関数を使えるようになるわけではないみたいですし。

ありがとうございました。

459 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 11:00:01.20 ID:Xg3rwxDQ0.net]
Function wf() As WorksheetFunction
Set wf() = WorksheetFunction
End Function
こっちで呼び出し短縮は出来ました。初めて使いましたfunction



460 名前:デフォルトの名無しさん [2022/09/01(木) 14:07:42.09 ID:Xg3rwxDQ0.net]
名前付きセル範囲を使うためにnamesコレクションを理解しようとしてるのですが、
activeworkbook.namesをfor eachに入れると現在は1個しか出て来なくて
値が
=#NAME?
こんなのです。エクセルの方から名前の管理を開いてもこの名前は出てきませんし、何も出てきません。
何なのでしょうか?この値は?
なにも設定されてない時の値かと思ってワークシートのあるセルに名前の設定をしみたのですが、
やはりこの値は残ったままでした。
RefersToでもvalueと同じく
=#NAME?

461 名前:460 mailto:sage [2022/09/01(木) 14:14:01.95 ID:Xg3rwxDQ0.net]
わからないまま、vbaから非表示を表示させるコードをコピペして削除しておきました。
こんな名前作った覚えはないですが

462 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 14:38:52.05 ID:nUWOz2Sg0.net]
そっか、うんうん、非表示を表示ね、良かったね

はい次の方

463 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 15:07:23.09 ID:xiyCUJHG0.net]
ニートならロン毛にしろよ

464 名前:デフォルトの名無しさん [2022/09/01(木) 19:17:21.60 ID:Xg3rwxDQ0.net]
Range型と配列の違いが後一歩わからないのですが、
Sheet1にA1=10,A2=20,A3=30,B1=40,B2=50,B3=60....みたいにしてar(2,2)と近い感じにしてます。
Sub Sample1()
Dim ar(2, 2) As Variant
ar(0, 0) = 10
ar(1, 0) = 20
ar(2, 0) = 30
ar(0, 1) = 40
ar(1, 1) = 50
ar(2, 1) = 60
ar(0, 2) = 70
ar(1, 2) = 80
ar(2, 2) = 90
Debug.Print TypeName(ar)
Debug.Print TypeName(Worksheets("Sheet1").Range("A1:C3"))
End Sub
arはvariant型の配列でWorksheets("Sheet1").Range("A1:C3")はrange型のオブジェクトになるんですよね。

感覚的にはどちらも配列を渡している気分なのですが、セル範囲参照のrangeだからrange型オブジェクトになるってだけですか?

465 名前:デフォルトの名無しさん [2022/09/01(木) 19:18:06.47 ID:EeQXBP72d.net]
馬鹿過ぎてやばい奴が来てる

466 名前:464 mailto:sage [2022/09/01(木) 19:23:31.46 ID:Xg3rwxDQ0.net]
for each のinの後に配列をおいても、range型オブジェクトをおいても
同じように中身を取り出してくれるから混乱してしまったのかもしれません。

467 名前:デフォルトの名無しさん [2022/09/01(木) 19:28:08.64 ID:bYXIuDKK0.net]
もし Dim ar(2, 2, 2) As Variant なら3次元の配列としか言いようがない

468 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 20:43:50.82 ID:QMR92n1t0.net]
本人は切実なんだろうけどイマイチ何を理解しようとしているのかが汲み取れない。

とりあえず、シートは二次元配列みたいなものと思えばいいんじゃないかなぁ。
バリアント型の変数に範囲指定したrangeを代入したら配列が出来上がるんだから。。。

って、こういうの説明するのって余計に混乱させそうで怖いのよね。

469 名前:デフォルトの名無しさん mailto:sage [2022/09/01(木) 22:31:39.49 ID:xiyCUJHG0.net]
なんでそんな事やっているんだろう。。??



470 名前:デフォルトの名無しさん [2022/09/01(木) 23:45:17.73 ID:7Zuj6Csb0.net]
Rangeオブジェクトと配列、全く異質のものなのに同じ代入インターフェースがつかえるのが不思議なのでしょう
女学生は貧困で給食費すら払えないのに上級国民は交通費で200万円貰えるのですから

471 名前:デフォルトの名無しさん mailto:sage [2022/09/02(金) 00:10:13.04 ID:vXxCvmAd0.net]
>>464
配列には数字しか入っていませんが、
Rangeオブジェクトには数字以外に色や罫線やハイパーリンクなど色々な情報が入っています。というかワークシートのセルそのもの(オブジェクト)です。

472 名前:デフォルトの名無しさん mailto:sage [2022/09/02(金) 03:22:55.43 ID:XYWvvS0T0.net]
>>464
オブジェクトにはデフォルトプロパティというのがあってな
オブジェクトを参照してるつもりでも、実はそのデフォルトプロパティを参照してるんだよ

Worksheets("Sheet1").Range("A1:C3")はRange型だが、
そのデフォルトプロパティは2次元配列なのだよ

473 名前:デフォルトの名無しさん (ワッチョイ 023e-y80L) [[ここ壊れてます] .net]
ttps://www.tipsfound.com/vba/18014

このコードでcsvファイルをエクセルの指定のシートに取り込めますか?

474 名前:デフォルトの名無しさん mailto:sage [2022/09/02(金) 07:13:47.06 ID:rviUcujq0.net]
>>473
やってみて聞いてるの?自分でやるのが面倒臭いからとりあえず聞いてるだけ?

475 名前:デフォルトの名無しさん [2022/09/02(金) 07:18:17.22 ID:K+fb6kZO0.net]
最近のレベル低下には目を見張るものがあるな

476 名前:デフォルトの名無しさん [2022/09/02(金) 07:25:48.67 ID:+uzTYabFM.net]
総合相談所で総スカンされた馬鹿だろ

477 名前:デフォルトの名無しさん mailto:sage [2022/09/02(金) 11:01:00.75 ID:BYdQXtrB0.net]
いや、そもそも何でそんな事やりたいのか??
という質問自体がさ

478 名前:デフォルトの名無しさん [2022/09/02(金) 12:33:00.40 ID:MAC5jHq+0.net]
よそのサイトなんだから作った奴にきけばいいのにと思う今日この頃

479 名前:デフォルトの名無しさん mailto:sage [2022/09/02(金) 14:51:15.82 ID:BYdQXtrB0.net]
ど正論出ました
終了



480 名前:デフォルトの名無しさん (ワッチョイ 5f3e-NodX) [[ここ壊れてます] .net]
>>476
あれ総スカンだったんですか?
外部データの取り込みでcドライブのファイルを取り込んでいるのに

そのエクセルのファイルを他の人にコピーして渡したら同じ場所にファイルを配置しているのにファイルが読み込めないって聞いただけなのに笑

481 名前:デフォルトの名無しさん mailto:sage [2022/09/03(土) 12:58:16.39 ID:WuOEJ3Bid.net]
あっちでも総スカンだしここでも総スカンなんだからもういいでしょ
レベル低いよあんた

482 名前:デフォルトの名無しさん [2022/09/03(土) 14:11:09.43 ID:fgoOqg3v0.net]
しつこい馬鹿

483 名前:デフォルトの名無しさん mailto:sage [2022/09/04(日) 02:41:16.33 ID:+4pXrWCU0.net]
向こうの総合相談スレはこのスレと違って厳しい人ばかりだからな。

484 名前:デフォルトの名無しさん [2022/09/04(日) 17:26:08.83 ID:nTptsQZA0.net]
>>483
VBAのスレよりも質問スレは厳しい人ばかりなんですね

485 名前:デフォルトの名無しさん mailto:sage [2022/09/04(日) 21:22:49.28 ID:+4pXrWCU0.net]
少しでも的外れな質問したら総スカンだからな。
初級者だろうが容赦ないのが向こう。

486 名前:デフォルトの名無しさん [2022/09/04(日) 22:38:27.70 ID:I+EDFKibr.net]
replace関数でワイルドカードを使用してるのですが、
うまく置換していくれないのでなぜですか?

やりたいこと A1セルのKKK1111というデータを2222に変換したい
replace("A1","*" & "K"& "*","2222" )

487 名前:デフォルトの名無しさん (ワッチョイ 07a5-Iguz) mailto:sage [[ここ壊れてます] .net]
REPLACE(文字列, 開始位置, 文字数, 置換文字列)

488 名前:デフォルトの名無しさん mailto:sage [2022/09/04(日) 23:39:15.09 ID:+4pXrWCU0.net]
優しいなみんな
総合スレだったらフルボッコ

489 名前:デフォルトの名無しさん [2022/09/05(月) 18:43:28.63 ID:8FlTtg5u0.net]
初心者あるあるなんだろうか



490 名前:デフォルトの名無しさん [2022/09/05(月) 22:48:54.81 ID:C53zNTJD0.net]
ありがとうございました。
ユーザー定義型と連想配列を知って少し前進しました。

検索掛けてもなかなかでないので教えてください。
dim i
for i....
使い終わったらiを未定義に戻したいんですが、
宣言の反対?になるような未定義に戻す関数?ステートメント?はありませんか?

491 名前:デフォルトの名無しさん mailto:sage [2022/09/05(月) 23:44:13.97 ID:ZiXiUX+x0.net]
無いし気にする必要もない

492 名前:デフォルトの名無しさん [2022/09/06(火) 02:21:14.99 ID:xcONMZhZ0.net]
>>490
ちなみに戻したい理由は何?

493 名前:デフォルトの名無しさん [2022/09/06(火) 03:38:48.46 ID:DWdJNYk/d.net]
馬鹿に理由を問う虚しさ

494 名前:デフォルトの名無しさん mailto:sage [2022/09/06(火) 05:21:21.45 ID:Fb+lfM05d.net]
変数は使い捨てだよVBAの場合

495 名前:デフォルトの名無しさん mailto:sage [2022/09/06(火) 06:55:14.80 ID:FWLy+pWW0.net]
プロシージャ内で宣言した変数ならプロシージャを抜ければクリアされるしマクロ全体が終了すれば全てクリアされるからあまり気にしない。
privateやpublicで宣言したオブジェクトなら明示的にnothingをsetすることはあるけど、イマドキのPCでメモリ解放もあまり気にする必要はない気もする。
エラーで止まったときを考えると念の為しておくくらいかなぁ。

496 名前:490 (ワッチョイ bf66-bBdM) [[ここ壊れてます] .net]
初心者なのでプロシージャ内で処理の順番を変えたくなる時があります。
使う直前に宣言したいのでプロシージャの初めに宣言は出来ればしたくありません。
コピペでソースコードを入れ替えて処理の順番を変えるとforが1回目とfor2回目が入れ替わってしまう事があります。
だから毎度forを使う前は、foreacheもそうですが、宣言が必要かをプロシージャ内を戻って探します。
forが終わるたびに未定義に出来ればいいなと思ったのは使い終わった変数名が後からかぶっても
使い終わった時点で未定義に戻しておけばエラーも不具合も出ないからです。
他の言語だとあるのであるかなと思ったのです。

497 名前:デフォルトの名無しさん mailto:sage [2022/09/06(火) 10:03:36.29 ID:Z9J6cI+IM.net]
はい、わかりました

498 名前:デフォルトの名無しさん [2022/09/06(火) 10:56:34.50 ID:MUc/w1ud0.net]
>>496
>他の言語だとある
これ本当?

499 名前:デフォルトの名無しさん [2022/09/06(火) 11:47:55.76 ID:DWdJNYk/d.net]
馬鹿ではなく糖質かな



500 名前:デフォルトの名無しさん [2022/09/06(火) 11:53:04.38 ID:o3g0SSKzd.net]
会社のパソコンでvbsからエクセルvbaを起動させメール本文、添付ファイルを作成し添付、outlookでメール送信をしたいのですがOutlookが起動しません。
エクセルから手動でvbaを起動すると正常に動作するのですが、vbsから起動するとタスクバーのエクセルが点滅し停止します。
特にエラーを吐いている様子はありません。

何か思いあたる部分があればご教示ください

501 名前:デフォルトの名無しさん mailto:sage [2022/09/06(火) 12:06:14.05 ID:QxRWO4Sk0.net]
漏れの推測だけど、

>タスクバーのエクセルが点滅し
これは、バックグランドで起動しているのでは?

それで、エクセル内のマクロなどが起動しないとか?

502 名前:デフォルトの名無しさん mailto:sage [2022/09/06(火) 12:18:01.17 ID:iobTnTaB0.net]
>>498
定義済みが未定義になるわけじゃないけど
ブロックスコープとかいうやつだな

残念ながら旧VBやVBAにはない。VB.NETにはあるけど

VBAの一番狭いスコープはプロシジャ
なので、プロシジャの先頭に宣言まとめとけって作法がある

503 名前:デフォルトの名無しさん [2022/09/06(火) 13:03:51.66 ID:BhZhCXYFd.net]
>501
vba自体は動作しております。
手動でvbaを起動するとエクセルが開き添付ファイルなどを作成し、Outlookで送信するのですが
vbsでの起動だと添付ファイルまでは作成するのですが、Outlookが立ち上がらず、タスクバーのエクセルが点滅して動作が止まります。

ネットで調べても事例が出てこず、会社のパソコンなのでシステム管理者に制限をかけられているのか…
何か調べる方法がありましたら教えてください

504 名前:デフォルトの名無しさん mailto:sage [2022/09/06(火) 13:07:25.60 ID:Z9J6cI+IM.net]
printfデバッグでどこまで動いているか確かめましょう!

505 名前:デフォルトの名無しさん mailto:sage [2022/09/06(火) 13:13:46.25 ID:Td+5EGNEa.net]
>>496
始めに宣言を書いている方が探しやすいと思うけど
要らなさそうなものはまとめてコメントして確認すればいいわけだし

506 名前:デフォルトの名無しさん (ワッチョイ 07da-oTx6) mailto:sage [[ここ壊れてます] .net]
VBAでメールとか初めて見た

507 名前:デフォルトの名無しさん (ワッチョイ e72f-HH83) mailto:sage [[ここ壊れてます] .net]
>>500
手動で実行できるなら、VBSで起動しているときのユーザとその権限があやしい
つかエラー吐いてないんじゃなくて、ちゃんとエラー捕まえられてないだけだと思うが

あとスクリプト系からのメール送信はいろいろセキュリティ周りでチェックされるかもしれん
とくに会社で管理されてるようなPCなら、ちゃんと管理者に許可とってからやれよ

508 名前:デフォルトの名無しさん (ワッチョイ 2749-DXwO) mailto:sage [[ここ壊れてます] .net]
メール送信用のc#のexeつくって呼び出させるようにしたことならある
あとsendgridAPIよぶの
前者は他にも使い回したな。.NETcoreだった気がするからいつまで使えるやら

509 名前:デフォルトの名無しさん (ワッチョイ 5f01-yqJ9) mailto:sage [[ここ壊れてます] .net]
>>498
あるものもある、例えばPowerShellにはそのものズバリのRemove-Variableなんてものがあったりする



510 名前:デフォルトの名無しさん mailto:sage [2022/09/06(火) 16:28:13.42 ID:QxRWO4Sk0.net]
>>503
>タスクバーのエクセルが点滅して動作が止まります
バックグランドで起動しているだけじゃ、エクセルのマクロが実行されないのかも

printf デバッグで、どこまで動いているか確かめるべき!
エクセルのマクロの、Outlook の起動コードの前後で、何かを出力すれば?

Outlook の起動前に、端末・ファイルへ出力する
Outlook の起動コード
Outlook の起動後に、端末・ファイルへ出力する

511 名前:デフォルトの名無しさん [2022/09/06(火) 20:05:52.59 ID:D5ckGmEva.net]
動作が止まるのは終了したからかもよ






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

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

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