Excel VBA 質問スレ P ..
[2ch|▼Menu]
263:デフォルトの名無しさん
22/08/06 19:40:38.17 bSEd2c570.net
>>256
確かに。
まあアピールポイントに特徴ある人だと思う

264:デフォルトの名無しさん
22/08/06 21:13:56.39 xsmVc9Uv0.net
講演活動は知識だけの人が多いからなあ

265:デフォルトの名無しさん
22/08/06 21:38:32.41 IcxH468v0.net
ちょっと何言ってるかわからない

266:デフォルトの名無しさん
22/08/07 02:04:59.69 Zc4u6CYP0.net
>>265
実務経験ゼロでも成り立つ
講演、物書き、教育は、実務経験ゼロの会社がたくさんある。
だから、実例がすぐに出ない。

267:デフォルトの名無しさん
22/08/07 05:34:07.23 tUFhHO190.net
実例も知識じゃねーの

268:デフォルトの名無しさん
22/08/07 10:09:42.78 eoT1bhw/0.net
スレにまったく関係ないけど思い出した
取引先からある事情でビジネスマナー講義の受講(講師はそこの女社員)を強制されたことがあって
最初ら違和感あった(俺の親が逝ったと告げても何の反応もなしとか)けど講義内容に矛盾があったので指摘すると猛烈な人格批判が始まって驚いた
他日ウチの社長がそいつの社長(中小同士で学生からの友人)に会いに行ったときにちょっと遅刻したことがあって
秘書気取りのその女が用事があるからと言いつつウチの社長を小一時間ほど待たせた
流石に何かおかしいと思ったウチの社長が事情を問うと「取引相手を待たせるのはトップ失格だそれを自覚させるためにやった」などと主張したそうだ
つまり一種のコミュ障でコンプレックスある女が他人を見下ろすために知識の寄せ集めだけで副業に仕事をしていたって話
冒頭のある事情ってのも察してもらえれば

269:デフォルトの名無しさん
22/08/07 10:59:56.86 iThpGePG0.net
性格や考え方に問題あっても知識があるならいいんじゃね
実務経験があっても知識のない上司に相談して解決するならそうすればいいし
そもそも自分に知識があれば全て解決できるわけなんだが

270:デフォルトの名無しさん
22/08/07 11:09:10.44 UpuFs56f0.net
日本の企業は人材の性格も重要視するもんね。
能力あっても人間がクソなら採用見送ったり出世対象から外したり。

271:デフォルトの名無しさん
22/08/07 12:24:17.99 uNtQuwFMd.net
性格は欧米の方が重視されるぞ
文化的民族的背景が多様で自己主張も激しいから、クソ野郎は問答無用で切っていかないと無茶苦茶になる
日本はなんだかんだそこまで酷い人間は稀だからな

272:デフォルトの名無しさん (オッペケ Sr5d-4bUZ)
22/08/07 12:57:45 TWy7Xhzwr.net
>>268が不明瞭なので補足
寄せ集めの知識というのは複数著者のテキストを咀嚼せず文字通りコピペしてるって意味
例えばビジネスコミュニケーションでは科学的根拠に基づかなければいけないというパワポ資料の次ページでナントカ占いみたいな性格判断が出てきたりとか

273:デフォルトの名無しさん (ワッチョイ eb8f-2+m5)
22/08/07 14:41:48 JbyM4yYv0.net
説明が下手くそな輩ばっかだなこのスレ

274:デフォルトの名無しさん
22/08/07 15:39:52.33 TKajqBRY0.net
>>273
確かにそうだな
ここはお前の力の魅せどころだぞ

275:デフォルトの名無しさん (ワッチョイ 6bda-erdL)
22/08/07 16:25:54 UpuFs56f0.net
いや、言っている事は分かるから全然良いですよ
ただ、要点だけまとめてくれたら読みやすいかなーと。
同志達たのんます。

276:デフォルトの名無しさん
22/08/07 17:53:18.30 iCiStKaEd.net
VBAと関係ないおっさん達の自分語りはいつ頃終わりますか?

277:デフォルトの名無しさん
22/08/07 17:57:35.06 fAQAAmLc0.net
>>276
お前みたいに構うやつがいなくなるまで無理じゃね

278:デフォルトの名無しさん
22/08/07 18:06:12.30 /jCP59e6d.net
>>276
ほんと他で話せばいいのにと思うよな
質問来てもろくな回答もできないからこういう答えの不要なレスするしかないんだろ

279:デフォルトの名無しさん
22/08/07 18:32:46.70 NS+q4Bfp0.net
まぁ質問者がいないときはいつもこんな感じだけどな

280:デフォルトの名無しさん
22/08/08 10:19:45.18 wk4U/6Hx0.net
質問いいですか?

281:デフォルトの名無しさん (ワッチョイ 13ad-YzdW)
22/08/08 14:27:36 aqubZxNB0.net
どうぞ

282:デフォルトの名無しさん
22/08/08 22:16:45.25 bMElgXf+d.net
VBA でモテるにはどうしたら良いですか?

283:デフォルトの名無しさん
22/08/08 22:25:23.54 ptVxpUmad.net
そんなことをここで聞いてる時点で無理

284:デフォルトの名無しさん
22/08/09 10:07:28.51 b44kZqNV0.net
Excelできれば女子にモテるぞww
とか言われたからExcel始めたけど
ウソだったわ。
逆にキモがられるようになったら。

285:デフォルトの名無しさん
22/08/09 10:20:16.32 /NfYTDtW0.net
>>248
カプコンの1943思い出した
ステージクリアで尉官が上がって最終的に特別中将だったかな
よく考えたら社長クラスが一人で突撃w

286:デフォルトの名無しさん
22/08/09 11:12:29.84 SavN6yJh0.net
Excel出来るようになったのではなく他に問題があるのでは🤔

287:デフォルトの名無しさん (ワッチョイ 6bda-woMg)
22/08/09 14:08:30 rR0EJQ8B0.net
>>284
だまされたんだと思う、もうExcelやめた方がいいよ

288:デフォルトの名無しさん
22/08/09 14:53:29.86 b44kZqNV0.net
>>287
分かった。
Wordに移行するわ。

289:デフォルトの名無しさん
22/08/09 15:01:15.06 SavN6yJh0.net


290:デフォルトの名無しさん
22/08/09 15:23:13.16 8JIsTWChM.net
Excelできるけど仕事はできない人

291:デフォルトの名無しさん
22/08/09 20:40:53.82 AVc3PDFp0.net
パワポ男子の方が格好いいと思うなあ

292:デフォルトの名無しさん
22/08/10 08:38:11.60 fdOq6fLVd.net
excel365でファイルを更新した形跡を全く残さない方法って何かありませんか?
弄る部分はマクロのコードのみです
業務を格段に楽にするマクロをいくつも組んでやったのに感謝も薄く図々しく給与にもビタイチ反映されなかったので
このクソブラック企業を辞めるときに全部壊していきたいのですがバレるとアウトなので
変えないようにしたいのはファイル名の横に出る更新日時です

293:デフォルトの名無しさん
22/08/10 09:10:02.43 ph9U25aD0.net
エクセルのVBAって2000から現在までの間に
ここで大きく変更があって互換性に問題があるみたいなのありますか?

294:デフォルトの名無しさん
22/08/10 10:06:18.63 kx7L/9BB0.net
>>292
一応言っておくけどお前のやろうとしてることは犯罪だし、回答書くと犯罪幇助になるから

295:デフォルトの名無しさん
22/08/10 10:07:16.58 kx7L/9BB0.net
>>293
2007 辺でグラフ周りが色々変わって過去のマクロでエラー出たことがある

296:デフォルトの名無しさん
22/08/10 10:10:55.76 uspPIoStd.net
そこそこあると思うよ
なので自分はバージョンごとにコードを振り分けたりした
実際に試したほうがいいんじゃないかな

297:デフォルトの名無しさん
22/08/10 10:22:34.51 20iS7AqN0.net
>>293
64bit化、ワークシートの大きさ、ワークシート関数の増減など、バージョンごとにどんどん変わってる
何を問題とするかは人それぞれで、利用環境や目的にもよるので、ちょっと質問が曖昧すぎ

298:デフォルトの名無しさん
22/08/10 10:36:03.23 p8b8cWYPd.net
>>292
こいつみたいなのがまさにこういうパターンだ
馬鹿が内容も理解せずコピペで作ったマクロのせいで間違いが発生していた
コピペ主体だからメンテ不可能だった
そのくせ馬鹿は自分が他の人より偉いと思い込んでいた

299:デフォルトの名無しさん
22/08/10 11:45:31.80 uspPIoStd.net
犯罪の質問なんて無視しとけよ
構うお前も同じなんだぞ

300:デフォルトの名無しさん
22/08/10 11:53:09.98 5QJKzNy5d.net
嫌がらせして辞めたところで迷惑を被るのは同じ作業してるポジションの人か後任の人だろうからやめとけ
査定をしてる立場の人達は痛くも痒くもない

301:デフォルトの名無しさん
22/08/10 12:39:15.19 fdOq6fLVd.net
うちのブラックに来たら誰でも同じことしたくなると思うけど
犯罪なのは分かったからやめとくわ
あと言っとくけどうちにはマクロ組めるような奴はいないし
体系的に学んだ上きれいなコードで書いてるからくだらんレッテルはいらない

302:デフォルトの名無しさん
22/08/10 12:55:04.32 /NkHb0sD0.net
>>292
マクロ作るのもあなたの業務だったのでは?
会社で仕事して給料もらえてたのにそれ以上のことなんかないよ

303:デフォルトの名無しさん
22/08/10 13:53:09.69 kx7L/9BB0.net
> 犯罪なのは分かったからやめとくわ
犯罪じゃないと思ってたのかよ...
まじでヤベー奴やんw

304:デフォルトの名無しさん
22/08/10 14:04:12.08 0PwnBNIZ0.net
気持ちは分かるが犯罪はいけないな。
次回からはそういうことに備えて
マクロにパスワード掛けて
時間が経ったら期限切れのメッセージでも
ポップアップして処理を中断させる
ようにでもしておけばいい。
もっとも、自分の作業効率化のために
頼まれてもいないのに勝手に作ったというなら
根こそぎ消しても問題ないとは思うけどな
どうしてもしたいというなら
法テラスにでも相談しに行けばいい。

305:デフォルトの名無しさん
22/08/10 14:26:23.92 Mq4biE7dM.net
If Date > 退職日 Then
Exit Sub
End If
あとは全部インデントなくすとかコロンで繋げるとかプロシージャ名を処理内容と紐づかないものにするとか
色々引き継ぎの嫌がらせは考えたことあるけど、やったら何訴えられるかわからんからやらない

306:デフォルトの名無しさん
22/08/10 14:28:02.85 5QJKzNy5d.net
てか保守出来る人居ないなら何もしなくてもそのうち会社は面倒事に巻き込まれるだろ
フォーマットがちょっと変わったり、新しい特殊な項目が追加されて使いものにならなくなったりするし

307:デフォルトの名無しさん
22/08/10 15:51:28.73 uspPIoStd.net
放置すればいいものを
くだらない話には食いつく奴ばかりだね

308:デフォルトの名無しさん
22/08/10 15:58:20.27 AlyojMao0.net
123 10
123 11
123 15
空白
空白
124 18
124 22
空白
125 20
空白
126 15
126 10
みたいな並びのコードがあって、
上下のコードが同じ場合、コードの隣の数字を10%で割り戻した数字を計算したものと、10の数字をそのままにしたものを2つ持っておいて、コードが変わるところまでそれぞれ計算したら、コード単位で10%で割り戻したものの合計値と、割り戻してないものの合計値の差分を
一行挿入して差額として123のいくらと転記
空白行は無視。
差額が出ない場合(基本的にはないけど)は行の挿入はしない、
というvbaって作るの可能?
差額を持たせることまではできたんだが、
挿入のところでこれ無理では?と思って止まってます。

309:デフォルトの名無しさん
22/08/10 16:00:49.46 AlyojMao0.net
ちなみにデフォルトで入ってる空白は無視です

310:デフォルトの名無しさん
22/08/10 18:18:34.25 kx7L/9BB0.net
>>308
挿入/削除はいろいろ面倒だから簡単にやるには別シート(もしくは別列)に転記しながら処理して最後に書き戻すのがわかりやすいと思う
スマホから入力してるから細かいミスはあると思うがこんな感じ
Dim S1 As WorkSheet: Set S1 = WorkSheets(1)
Dim S2 As WorkSheet: Set S2 = WorkSheets(2) ' 空のシート
Dim R1 As Long
Dim R2 As Long: R2 = 1
Dim N0 As Long: N0 = 0 ' 元の値合計
Dim N1 As Long: N1 = 0 ' 割戻し合計
Dim C0 As String ' 処理中のコード
C0 = S1.Cells(1, 1).Value
For R1 = 1 To S1.Cells(S1.Rows.Count, 1).End(xlUp).Row
Dim C1 As String ' 現在のコード
C1 = S1.Cells(R1, 1).Value
If C1 = "" Then Goto Continue
If C0 <> C1 Then
S2.Cells(R2, 1).Value = C0
S2.Cells(R2, 2).Value = "差額: " & CStr(N0 - N1)
R2 = R2 + 1
C0 = C1: N0 = 0: N1 = 0
End If
S2.Cells(R2, 1).Value = C1
Dim N2 As Long: N2 = S1.Cells(R1, 2).Value
S2.Cells(R2, 2).Value = N2
R2 = R2 + 1
N0 = N0 + N2: N1 = N1 + 0.9 * N2
Continue:
Next
S2.Cells(R2, 1).Value = C0
S2.Cells(R2, 2).Value = "差額: " & CStr(N0 - N1)

311:デフォルトの名無しさん
22/08/10 19:06:30.56 LEtlyiDn0.net
スマホからこんだけ入力するのは感心するわ

312:デフォルトの名無しさん
22/08/10 19:40:10.67 AlyojMao0.net
>>310
ありがとうー!!
後半のC1:N0あたりの動きが読み取るのがちょっと難しいですが、
別シートに単純に一度書き写していって最後に読み戻すってのは目から鱗です
確かにそっちの方が問題なくできるかもしれないです
試してみます!

313:デフォルトの名無しさん
22/08/10 20:46:14.74 kx7L/9BB0.net
>>312
> 後半のC1:N0あたりの動きが読み取るのがちょっと難しいですが、
If C0 <> C1 Then
で、コードが変わった事を検出して変わったら
S2.Cells(R2, 1).Value = C0
S2.Cells(R2, 2).Value = "差額: " & CStr(N0 - N1)
R2 = R2 + 1
で、差分を追加して
C0 = C1: N0 = 0: N1 = 0
で、新しいコードを覚える共に合計値を初期化してる

314:デフォルトの名無しさん
22/08/10 20:48:55.75 p8b8cWYPd.net
こんなことがわからない奴が金計算をVBAでするなんて

315:デフォルトの名無しさん
22/08/10 20:57:23.40 ph9U25aD0.net
テキストファイルからキーワードが含まれてる行をセルに書き込みたいです
キーワードが8個あります
行=Bを「商品」か「価格」を""に置換して
元のBと違ってたら書き込むようにしたんですが
もっと簡素な方法ありませんか?
Open A For Input As #1'Aはテキストファイルのフルパス
Do Until EOF(1)
Line Input #1, B '1行分だけ読み込み
If B <> Replace(B, "商品", "") Then
i = i + 1
Cells(i, 1) = B 'セルへ入力
Else
If B <> Replace(B, "価格", "") Then
i = i + 1
Cells(i, 1) = B 'セルへ入力
End If
End If
Loop
Close

316:デフォルトの名無しさん
22/08/10 21:00:16.39 hNnMWsb/0.net
なんで商品と価格のReplaceを分けるのか

317:デフォルトの名無しさん
22/08/10 21:07:20.86 0PwnBNIZ0.net
>>315
InStrは嫌いなの?

318:デフォルトの名無しさん
22/08/10 21:43:46.56 AlyojMao0.net
>>313
ありがとうございます、
勉強中なので質問なんですが、
C1:N0 =0:N1=0の中の:ってどういう意味なんでしょうか?

319:デフォルトの名無しさん
22/08/10 22:04:25.44 NcNdkaPG0.net
突っ込みどころ満載の質問久しぶりね

320:デフォルトの名無しさん
22/08/10 22:24:43.27 kx7L/9BB0.net
>>315
> キーワードが8個あります
これはどうなったの?
単に複数のキーワードが含まれてるかを見たいだけなら
Line Input #1, B '1行分だけ読み込み
Dim K As Variant
For Each K In Split("商品,価格", ",")
If B Like "*" & K & "*" Then
Cells(i, 1).Value = B
i = i + 1
Exit For
End If
Next

321:デフォルトの名無しさん
22/08/10 22:31:30.17 uspPIoStd.net
>>315
どんなやり方でもいいと思うけどキーワードを含むかどうかを関数にするといいんじゃない
Function CheckKeyword(ByVal pValue As String) As Boolean
CheckKeyword = True
If pValue <> Replace(pValue, "商品", "") Then
Exit Function
End If
If pValue <> Replace(pValue, "価格", "") Then
Exit Function
End If
残りのキーワードも同様に判定
CheckKeyword = False
End Function
これを使えば
i = i + 1
Cells(i, 1) = B 'セルへ入力
の部分は1つでいいよね

322:デフォルトの名無しさん
22/08/10 23:03:22.07 kx7L/9BB0.net
>>318
VBA マルチステートメント
でググってくれ

323:デフォルトの名無しさん
22/08/10 23:23:06.57 20iS7AqN0.net
>>318
改行みたいなもん。たとえば
N0 = 0
N1 = 0
という複数行のコードを1行にまとめることができる
N0 = 0: N1 = 0
だけど、やらない方がいいと言われている

324:デフォルトの名無しさん
22/08/11 19:50:59.53 eLvp/vGod.net
変数宣言と同時に初期化する用途に限って俺は許容してるな
それよりif文を1行で閉じる奴が凶悪
ネストするとEnd ifの数が合わなくなる

325:デフォルトの名無しさん
22/08/11 20:39:49.16 Eqlf5oxG0.net
>>324
変数宣言と一緒に初期値設定する人はよく見かけるしアリだと思う。
同様に実は特殊な場合に限りIf文を一行で記載することもある。
本来構造化言語で使わない方が良いとされているGoto文も特殊な場合に限り使うこともある。
VBAは結構何でもありの言語だからその辺、仕事場のコーディングルールや
作ってる人のマイルールによって随分違いが出てくる。
一概にどんな方法をとることが最善とは言えないから人の書いたソース見てると面白い。

326:デフォルトの名無しさん
22/08/11 20:49:36.22 bTQMDZYqd.net
Ifの中身が1行だけの時に全体を1行で書くのはマルチステートメントとは違うくない?
If a = 0 Then b =0
あくまでコロンでつなぐ場合のことでしょ

327:310 (ワッチョイ 1301-lJ3c)
[ここ壊れてます] .net
俺も本来はマルチステートメントは使わないけど、5chのレスは行数制限あるからマルチステートメントにしてるだけ
そもそもこの手の話は好みもあってどっちが正しいとかはないからそろそろやめようよ

328:デフォルトの名無しさん
22/08/11 22:00:47.13 /ib3rHvC0.net
そもそもダメだとか誰が言っているのだろうか。。

329:デフォルトの名無しさん (スッップ Sd33-N11w)
[ここ壊れてます] .net
○○ならアリって言ってるってことはそれ以外はナシって受け取る人もいるだろ
提供されたコードをそのまま使うだけしかできないならそれだけの話だし
自分のルールに従って直せばいいだけの話で人のコードにケチ付ける必要なんてないだろ

330:310 (ワッチョイ 1301-lJ3c)
[ここ壊れてます] .net
>>328
> だけど、やらない方がいいと言われている
みたいな意見があるから

331:デフォルトの名無しさん
22/08/12 00:11:05.61 gP2cSn76d.net
コーディングルールなんて宗教みたいなもんだけど、一応マルチステートメントは推奨されないという意見のが多数
リーダブルコードにも書いてあるし、MS公式も推奨しないと言ってる
URLリンク(docs.microsoft.com)
明確に禁止したがってる人は肌感覚でもっと少数派だけどね

332:デフォルトの名無しさん
22/08/12 00:24:13.41 nWfz+VWs0.net
どうせ仕事でVBA作ってる質問者なんて少ないやろ

333:310
22/08/12 05:00:53.71 zAuzG+foa.net
>>331
おっちゃんそれVBAじゃなくてVB.NETのドキュメントやで

334:デフォルトの名無しさん
22/08/12 05:44:37.34 Icr7mfuu0.net
Van.Netなら変数宣言と同時に初期値設定出来るから
引き合いに出すのもお門違いだな

335:デフォルトの名無しさん
22/08/12 06:23:06.84 dDX14IC1M.net
>>334
van.netなどない、このハゲ!

336:デフォルトの名無しさん
22/08/12 08:48:11.58 nWfz+VWs0.net
中のVBAのコードだけGitに上げることってできるの?
めんどいコマンドとか外部サービス使わずに
そもVBEからコミットとかプルリクとかやりたい

337:デフォルトの名無しさん
22/08/12 09:02:48.49 Icr7mfuu0.net
>>335
すまん、VB.Netの間違いだった
しかし俺は禿げてはいない。頭頂点しかな!!

338:デフォルトの名無しさん
22/08/12 09:16:28.60 Icr7mfuu0.net
>>336
まあコードをエクスポートしたものを載っけておくくらいかな。
Bisual Sutadioみたいにエデイタ上から設定するのは無理だと思った。
て言うかコードだけ取っておいてもexcelのVBAの場合はexcelそのものに影響されるところも多いから
excelごと取っておいてソースを比較したいときだけ何かのツールでソースの比較を行った方がいいと思う。

339:デフォルトの名無しさん
22/08/12 12:38:04.21 Oc3JB1Iir.net
Bisual Sutadio

340:デフォルトの名無しさん
22/08/12 12:52:14.02 kbIhrpmL0.net
>>336
今のVBAでGitは見たことないけど
昔VSSで管理するアドインがあったから、アドイン作ればできるんじゃね
>>338
マクロ入ってるエクセルはどうか知らんが、今のエクセルってXMLをzipで固めただけのはずだから
Zip解答してソース管理に突っ込む手もあるかもしれん
つかお前の誤字はわざとかこのハゲ

341:デフォルトの名無しさん
22/08/12 16:32:51.36 BEh6dSX60.net
お前ら禿好きだな

342:デフォルトの名無しさん
22/08/12 16:38:58.11 eSjTAJcc0.net
↑この人ハーゲマンです

343:デフォルトの名無しさん
22/08/12 17:59:10.79 BEh6dSX60.net
いきなし禿げたんよ。
去年の夏位まではふさふさだった

344:デフォルトの名無しさん
22/08/12 20:16:41.08 ijOecH2p0.net
それはコロナだから治療行けよ。

345:デフォルトの名無しさん
22/08/12 21:06:52.17 rQBVWxEE0.net
Dim Eight As Typhoon
Set Eight As Typhoon
Debug.Print Eight.HPa

346:デフォルトの名無しさん
22/08/12 21:35:36.13 JWVBEjPKr.net
質問です
エクセルでvba書くとハゲるというのは本当ですか?
それともハゲじゃないとまともなコードにならないということでしょうか?

347:デフォルトの名無しさん
22/08/13 00:36:53.33 7+qtu9p80.net
>>345
Set Eight = New Typhoon

348:デフォルトの名無しさん
22/08/13 00:54:21.19 C3GQNRB30.net
Print Eight.Name
Mary

349:デフォルトの名無しさん
22/08/13 07:49:57.82 Q44FuubAd.net
>>346
ハゲる→外に出られなくなる→VBAしか無い人生に陥る

350:デフォルトの名無しさん
22/08/13 18:00:34.01 +/onKVXv0.net
禿が気になるなら頭ツルッツルにするという構想は無いのかね?

351:デフォルトの名無しさん
22/08/13 18:44:02.54 qT7WXGgOd.net
Dim Hair As Object
Set Hair = Nothing

352:デフォルトの名無しさん
22/08/13 21:29:48.82 +/onKVXv0.net
>>351
座布団100枚

353:デフォルトの名無しさん
22/08/13 22:55:44.03 ZiFcsOVE0.net
>>346
こら!良い大人ならスキンヘッドと言いなさい!

354:デフォルトの名無しさん (ワッチョイ d2bd-nhkz)
[ここ壊れてます] .net
スキンヘッドが似合う顔ならスキンヘッドにしてるんですよ・・・

355:デフォルトの名無しさん
22/08/14 11:14:09.47 VI2zLni0a.net
ezoe職務質問されたってよ

356:デフォルトの名無しさん
22/08/14 13:17:19.86 RtZKjyzz0.net
>>355
QZ は逮捕・拘留11日を食らったってよ

357:デフォルトの名無しさん
22/08/14 16:16:37.77 L75yFRnI0.net
スキンヘッドは
メガネがポイントだと思う。
閑話休題。
次の話者に期待

358:デフォルトの名無しさん
22/08/14 16:36:03.46 LT2TaV3B0.net
皮頭よりはハゲと言われたほうが人権を尊重してるだろ

359:デフォルトの名無しさん
22/08/14 19:46:54.17 mUrr83gX0.net
>>349
→VBAの質問スレに書きこむようになる

360:デフォルトの名無しさん
22/08/14 23:12:05.82 LT2TaV3B0.net
きみたちハーゲマンに質問なのですが
VBAの配列でJavascriptのようにpushやpopを使いたいときってどうしてます?
わざわざredim使って要素数を変えるのはそれが頻繁になるときは使いづらいなと思うし。

361:デフォルトの名無しさん
22/08/14 23:52:33.60 mUrr83gX0.net
>>360
最初の配列はそのままで添え字を管理

362:デフォルトの名無しさん
22/08/15 00:13:18.77 WD7exLpg0.net
ツルピカかつ、不精ヒゲだから女さんなんて絶対に寄り付かない。

363:310
22/08/15 05:37:50.20 zxOEKBbO0.net
>>360
VBA で残念に思う所の一つやね
サイズの上限が決められるならその上限で確保してサイズは別途管理
上限が決められない時はReDimでちまちま管理してる
あとReDimでサイズを0にできないのも地味に辛い

364:デフォルトの名無しさん
22/08/15 06:56:28.24 OUaqH/oW0.net
>>361
>>363
レスありがとう、ハーゲマンたち。
じゃあしかたないんですね。
でもVBAでもpush, pop, shift, unshiftが使える配列のようなものをVBAのクラスかなにかを使って再現することは可能だろうか?

365:デフォルトの名無しさん
22/08/15 07:26:27.37 3rPnXTV50.net
>>364
可能、だが○○の機能がないから作れないではなく
目的の動作をするように作るんじゃね
質問が本末転倒している

366:デフォルトの名無しさん
22/08/15 08:25:48.51 7kbqjBHA0.net
>>364
他の言語でもスタックやキューは長さの決まった配列だよ
そこへオブジェクトを出し入れするときに端のポインタを動かすだけ
長さが足りなくなったら長さ2倍の配列を新しく定義してそっちへオブジェクトを引っ越し、オブジェクトの数が長さの25%を下回るようになったら長さ半分の配列を作り直してそっちへ引っ越し

367:310
22/08/15 08:28:07.85 zxOEKBbO0.net
>>364
pushpush, pop だけだけど実装例
URLリンク(kazusa-pg.com)

368:デフォルトの名無しさん
22/08/15 12:57:14.28 3rPnXTV50.net
EXCELのシートが配列みたいなもんだし

369:310
22/08/15 13:34:09.14 zxOEKBbO0.net
>>366
それは実装による
リストで実装してる奴もあるし

370:デフォルトの名無しさん
22/08/15 16:10:48.09 Z5BB7x+B0.net
VB(A)の配列でpopが必要になる場面ってあんまないなあ
不要になったらemptyぶちこむだけだし

371:デフォルトの名無しさん
22/08/15 18:21:13.35 u0LihC760.net
時間データ
>>364
他言語はよー知らんけどdictionaryじゃあかんの?

372:デフォルトの名無しさん
22/08/15 18:23:08.68 u0LihC760.net
>>371
ああスマン。なんかへんな一言張り付いた。

373:デフォルトの名無しさん
22/08/15 19:15:38.92 HvBHLkJg0.net
Dictionaryでいいと思う。
キーに連番、スタックポインタ代わりに変数一個用意してやって、使い終わったらremove で消して。

374:デフォルトの名無しさん (ワッチョイ 6eda-5Ix7)
[ここ壊れてます] .net
やり方は色々あるのにVBAが使いにくいとか言い出す初心者w

375:デフォルトの名無しさん (ワッチョイ 4d2f-O3lh)
[ここ壊れてます] .net
だがしかしVBAにDictionaryはないのだよ

WSHはいつまでサポートされるかなぁ
VBAより短い気がしてきた

まあ俺ならどうしてもキューかスタックほしいなら、.NET Frameworkのやつ使うかな

376:デフォルトの名無しさん
22/08/15 19:54:05.83 3rPnXTV50.net
だからVBA使うのやめなよ

377:デフォルトの名無しさん
22/08/15 20:17:32.58 kNyRr/sv0.net
VBAでDictionary使えるでしょ

378:デフォルトの名無しさん
22/08/15 20:25:53.14 u0LihC760.net
ああ、なるほど。いつ使えなくなるとも知れないとなれば先々を考えて使わないほうがいいかもね。たしかに使い方も特殊だし。>dictionary
まぁ、それなら捨てsheet作って貼り付けるかな。2次元までなら。
そのかわり処理速度は格段に落ちる可能性はあるけど、待ってりゃいいならそれもアリか。

379:デフォルトの名無しさん
22/08/15 20:28:32.11 Mg/eEpn60.net
それって findfirst/findnext 一発で済む問題なのでは?いちいちマクロで書くのもウザったいですよね‥‥

380:デフォルトの名無しさん
22/08/15 20:41:37.63 3rPnXTV50.net
使いにくいとか面倒とか愚痴るくらいならEXCEL使うのやめればいいのに

381:デフォルトの名無しさん
22/08/15 21:05:11.95 OUaqH/oW0.net
>>371
Dictionaryはとおの昔から使っておったのじゃよ。
しかし使い続けているうちにふと頭をさわるとなんとハゲてしまったのじゃ。
それは困ると思ってDictionaryに変わるいい方法を探求しておるのじゃ。

382:デフォルトの名無しさん
22/08/15 21:40:01.71 u0LihC760.net
>>381
なんだ、ただふざけてるだけか。。。

383:デフォルトの名無しさん
22/08/15 22:39:37.83 fsND5nPed.net
そんなハゲ頭に免じてArrayListを進ぜよう

384:デフォルトの名無しさん
22/08/15 22:52:26.96 HvBHLkJg0.net
DictionaryがイヤならCollection使えばいいと思うけど。
まぁ別に普通に配列でもいいんだけどさ。
多少凝った作りにしたって関数化しとけばいい訳だし。

385:デフォルトの名無しさん
22/08/16 04:43:22.32 Z2Qcd4DId.net
>>384
流石に無知すぎるから少し黙った方がいいよ

386:310
22/08/16 05:59:23.35 CNdrdYLw0.net
Collection に Exists メソッドがあれば...

387:デフォルトの名無しさん
22/08/16 11:11:29.27 09rAK4Ti0.net
何作ってんだよ

388:デフォルトの名無しさん
22/08/16 12:23:01.42 2L6vp4NY0.net
>>385
そうだね
よく分かりもしないで無知とか決めつける無知は
すっこんでればいいよね

389:デフォルトの名無しさん
22/08/16 16:58:27.92 tG1qlgnq0.net
あまりマウントの取り合いは止めようぜ
意見交換の場なんだから

390:デフォルトの名無しさん
22/08/16 17:40:43.11 09rAK4Ti0.net
どちらかというとけなし合いだな

391:デフォルトの名無しさん
22/08/16 18:00:08.72 0h33t1VnM.net
ここにいると神になった気分になるな
お前らの見苦しさに対してもなんだか優しくなれそう

392:デフォルトの名無しさん
22/08/16 18:20:47.96 tG1qlgnq0.net
昔は違ったんよ
いつからか荒れやすいスレになった

393:デフォルトの名無しさん
22/08/16 20:19:48.02 NUsqsy200.net
>>382
ふざけてるつもりは毛頭ございませぬ。
でもこれからもハーゲマンの名に恥じぬようVBAを探求していきたいです。

394:デフォルトの名無しさん
22/08/16 20:50:53.76 tG1qlgnq0.net
毛という毛全部剃っちゃえ!

395:デフォルトの名無しさん
22/08/16 21:16:40.24 NUsqsy200.net
>>394
アホ。
そしたらハゲてまうやんけ。

396:デフォルトの名無しさん
22/08/16 21:54:28.52 tG1qlgnq0.net
え?
別にいいじゃん、アンタ元から禿なんだから。

397:デフォルトの名無しさん
22/08/17 01:45:03.16 d962r+SMa.net
ソルのはムダ毛だけにしとけ

398:デフォルトの名無しさん
22/08/17 01:57:01.99 sNWv67oad.net
頭髪は生えないのに髭は生える

399:デフォルトの名無しさん
22/08/17 04:59:55.38 EILeizBb0.net
>>396
コラ、われわれハゲ族は、
励まし合って生きていかねばならぬ。
ハゲ増し合うことはするな。

400:デフォルトの名無しさん
22/08/17 07:35:41.89 hasTYsFP0.net
頭髪はハゲても、耳毛は濃くなる

401:デフォルトの名無しさん
22/08/17 11:39:32.10 Ork7WWB+0.net
禿ではないのだけど、40歳にして髪は真っ白よ。

402:デフォルトの名無しさん (ワッチョイ 6eda-5Ix7)
[ここ壊れてます] .net
好きな色に染めようぜ

403:デフォルトの名無しさん
22/08/17 12:58:33.86 PQdbwjDzr.net
Excelらしく緑だな

404:デフォルトの名無しさん
22/08/18 12:18:45.39 yPHO1+kSp.net
なんという体たらく
もうハゲはこのスレ出入り禁止でいいな

405:デフォルトの名無しさん (ワッチョイ fdb7-laJE)
[ここ壊れてます] .net
2つの表があって、表Aと表Bとして
表の作りは二つとも同じで、
コードと数字を持ってます。
二つの表のコードが一致してる場合は

コード  A B
101 50 60
102 40 100
103 30
104 50

といった感じで片方にしか存在しない場合は片方だけの行を追加して行くってvbaを作りたいんですが、何かいい案はありますか?
AとBの表で数字の比較をしたいです
for nextでやろうとしてますがうまくいいやり方が見つからずです

406:デフォルトの名無しさん (ブーイモ MM85-Hx7L)
[ここ壊れてます] .net
まずVBAを忘れます
SQLで FULL OUTER JOIN します
(゚д゚)

407:デフォルトの名無しさん (ワッチョイ 468c-hYSv)
[ここ壊れてます] .net
>>405
テーブルのリレーションシップを設定したらいいんじゃないかな

408:デフォルトの名無しさん (アウアウウー Saa5-dwW8)
[ここ壊れてます] .net
例えば以下の様なデータがあるとします

開始~終了:消費量
1月1日 0時~1月1日16時:500
1月1日16時~1月2日10時:1000
1月2日10時~1月5日 0時:800
1月5日 0時~1月5日0時:300
1月5日0時~1月6日0時:2500
1月6日0時~1月7日12時:1200


このように時間の区切りがバラバラ(かつ日跨ぎや0分間もある)のデータに対して、1月1日、2日、3日にそれぞれ合計いくらかを出したいです
なお、例えば20時~翌6時で1000の様な場合は4h:6h=400:600として計上したいです

どう計算するか方針すら思い浮かばないのですが何かアイディアありましたら教えてください

409:デフォルトの名無しさん
22/08/18 15:01:03.74 JMDQexcx0.net
vlookupでできない?
普通にforループでも難しいことなさそうだけど、どんなコード書いたの?

410:デフォルトの名無しさん
22/08/18 15:04:36.75 JMDQexcx0.net
>>409>>405へのレスね

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

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

413:デフォルトの名無しさん
22/08/18 16:12:23.70 EfwMa2qS0.net
できた!
二重ループでできました。

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

415:デフォルトの名無しさん
22/08/18 16:23:33.57 MNMwm62Z0.net
初歩的な質問なんだけど、上下一致してる場合だけ転記して行くという場合
1行目は例外として省く処理いれて
cells(r-1,1)=cells(r,1)とかってやってくと、不一致のものが現れた時に一致してた行の最初の値が転記できなくなるんだけどどうしたらいい?
100
100
101
101
102
とかって並びの時に、100の一番上が転記されないとか
102とかも転記されない
上下比較の時の最適解の比較方法を知りたい

416:デフォルトの名無しさん
22/08/18 16:23:56.43 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:デフォルトの名無しさん
22/08/18 16:34:05.48 EfwMa2qS0.net
>>416
ありがとぅざいます!
そうなんです
考え出したらこれかなり面倒だなと思って、、
同じような発想かもしれないですが
外のループはA表のコード番号の縦列の値を固定して、
内側ループでB表を縦にコードが一致するまで検知して
一致した場合フラグを立てて、一致したコードの時は一致してるコードの隣に値を転記。
内側ループを抜けた時点でフラグが立っていない場合はBにしか存在しない値なので、A表の最終行以降に転記
って考え方でいけました!

418:デフォルトの名無しさん
22/08/18 16:37:32.42 EfwMa2qS0.net
あ.A表に転記ではなくてC表ですね

419:デフォルトの名無しさん
22/08/18 18:49:57.27 AeknNWbaa.net
>>411,414
ありがとうございます、そのヒント元に自己解決できました
1. 対象となる期間を配列に格納
2. データを1つずつ0:00で分解、按分は都度[その日の時間/全体の時間]で実施
3. 配列内の一致する日付に割振り
4. 2-3ループ

420:デフォルトの名無しさん
22/08/18 20:46:21.25 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:デフォルトの名無しさん
22/08/18 22:39:41.60 MNMwm62Z0.net
>>420
相手がいない場合も転記です
そのやり方試してみます
単純そうでむずかしい…

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

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

424:デフォルトの名無しさん
22/08/19 09:33:47.59 TD6yT77i0.net
まずどういう出力か書けよ
頭悪すぎだろ

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

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

427:デフォルトの名無しさん
22/08/19 11:05:43.32 nezaNaBad.net
423の足しこんでいくというのは?もう何もわからない

428:デフォルトの名無しさん
22/08/19 11:07:12.98 nezaNaBad.net
転記?今日の天気?
Excel必要ですか

429:デフォルトの名無しさん
22/08/19 11:32:50.63 LZdSBpbV0.net
うるせえ!この禿!

430:デフォルトの名無しさん
22/08/19 13:14:47.90 aeNJth6k0.net
まず髪の毛緑に染めてこい

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

432:デフォルトの名無しさん
22/08/19 16:42:31.05 TM0tepDc0.net
重複除去したいって解釈してた

433:デフォルトの名無しさん
22/08/19 17:14:26.61 OSKKwF+I0.net
>>423
最終的に欲しい形を書け
エクセルの機能に重複データの除去ってあるのはしってるのか?

434:デフォルトの名無しさん
22/08/19 19:41:03.51 LZdSBpbV0.net
知らないのでわ?

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

436:デフォルトの名無しさん
22/08/19 20:23:56.98 uBoRK/pGd.net
足し込むというのが加算という意味であれば必然的に数値ということになるけど、、、
上の行と同じ数値なら足し算する=2倍するってことか?
それとも上と下の行が同じ数値なら現在行と上下の3行の和にするってことか?
なんかいろんな解釈ができる要望なんよね。。。

437:デフォルトの名無しさん
22/08/19 22:10:12.43 zQKwV5nn0.net
まぁ重複したデータを足し込むのか削除するのかはさした問題ではない。
ディクショナリやコレクションに元にあった値をキーにして
まずキーと同じ値をキーに該当する値として設定して、
同じキーが次回来たときに無視するか足し込むかすればいいだけの話だからな
最後にそれをシートに展開すればいいだけの話。
そうしとけば足し込もうが重複削除だろうが簡単に対応出来る。
SQLを知っているならSQLでやってもいい。
問題は同じ値が飛び石で来る可能性があるのかということ。
例えば101、101、102、101の順序で来ることがあるのか?
この場合、要件としては「上下で一致しているものだけ足し込む」ということなので上の例で言えば202、102、101と設定されるのが正ということになる。
これは上記した方法でやるのはかえってまどろっこしい。
そうしたら上から舐めてコレクションに値を格納、前回の行と次の行の頭が同じなら無視するか足し込むかすればいいし、値が違うならそのままコレクションに追加すればいい。
最後にそれをシートに展開する。
このように同じ数値が飛び石で来るかで作りがガラッと変わってしまう。せめてそこだけでもハッキリさせてくれれば。


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

327日前に更新/265 KB
担当:undef