13/10/05 03:14:35.26
まちがえた
>>456
○ num = 1
× num = 0
462:デフォルトの名無しさん
13/10/05 03:15:59.18
間違いだらけの青春
463:デフォルトの名無しさん
13/10/05 03:44:35.42
>>456
各フォルダのThumbs.dbが巻き込まれて全部jpgにリネームされたんだけど
464:デフォルトの名無しさん
13/10/05 08:05:51.30
何で現場には、Option Explicitなしで、一部の変数は宣言せずに使ってる
糞コードがあまりにも多いのか。基本中の基本だろうが。
465:デフォルトの名無しさん
13/10/05 08:22:43.71
>>464
現場に進言すればいいじゃん。
466:デフォルトの名無しさん
13/10/05 19:21:00.77
お前の現場が糞現場なだけ
467:桃白白 ◆9Jro6YFwm650
13/10/05 23:34:19.45
>>461
修正した。Σd(゚∀゚)グッジョブ!!
>>463
えーそれは困るよじゃあここをこう修正したらいいよとかそういう提案ある?
桃白白お耳傾けちゃう。
468:デフォルトの名無しさん
13/10/06 09:21:31.54
ありすぎて困る
一から書いた方が早い
469:桃白白 ◆9Jro6YFwm650
13/10/06 09:54:54.10
>>468
困ることはないでしょう。その中からこれがベストだっていうのをひとつ選べばいいだけなんだから。
恋人選ぶのとはちがうんだよ。教えてよ。
470:デフォルトの名無しさん
13/10/06 10:22:04.15
取り敢えず桃白とピラフとか言う生理キャラとどっちかにして欲しい。
ベストだって言うキャラのを一つ選んで。
471:桃白白 ◆9Jro6YFwm650
13/10/06 10:53:00.49
あー話逸らせちゃった。
まあほんとに書けるんだったらとっくに書いてなきゃおかしいわけで
できもしないくせに見栄張っちゃったってところかな。
472:桃白白 ◆9Jro6YFwm650
13/10/06 10:54:29.47
これだけ煽れば桃白白に教えざるをえないよ。策士桃白白。
473:デフォルトの名無しさん
13/10/06 13:22:21.85
ってかさ、未だにトリップキー漏れてるトリをつける神経を疑うわな。
というより本人じゃないやつが成りすましてる可能性が非常に高い。
俺の知ってる桃白白はコードなんか書かなくて、もっと紳士な奴なんだが。
本人に失礼だからいい加減成りすましやめたら?
474:デフォルトの名無しさん
13/10/06 13:45:02.42
取り敢えず桃白白は尻の穴キャラ
ピラフは生理キャラでOK?
475:デフォルトの名無しさん
13/10/08 23:01:07.19
WORDマクロってここで良いのかな?
エクセルと違って少ないですよね
476:デフォルトの名無しさん
13/10/08 23:09:26.96
>>475
このスレは間口広いから大丈夫のはず
477:デフォルトの名無しさん
13/10/08 23:11:48.37
>>475
何がですか?
478:デフォルトの名無しさん
13/10/08 23:24:58.30
すみません、スレとかマクロのサンプルが少ないってことです
今、WORDファイルの結合マクロを作ろうと考えているのですが
1つ目のファイル(名前.dot)の内容
[001] cat
[002] dog
[003] monkey
2つ目のファイル(b.dotx)の内容
(001) ねこ
(002) いぬ
(003) さる
のようになっています
これを
[001] a.docx cat
(001) b.dox ねこ
[002] a.docx dog
・・・
のように、ファイル名を付けて並び替えて1つのファイルにしたいのです
何かサンプルなどないでしょうか。
本物はもっと長文で、書式や校正履歴が有るために
エクセルでセルに張り付けてソートという方法が使えないのです
おねがいします
479:デフォルトの名無しさん
13/10/08 23:39:36.62
だが断る!
480:デフォルトの名無しさん
13/10/09 00:12:34.20
>>478
まず、何がわからないの?
ExcelのVBAは使える?
481:デフォルトの名無しさん
13/10/09 00:42:34.73
>>480
あまり使えないです
乱数発生してランダムにソート?とか
文字列の置換、取り出し(Left、Right、Mid)、変換(StrConv)とかくらいならなんとか
C、C++とかは少しだけ出来たんですが(MFCはわからないのでWin32APIで)
なんだかVBって記号的というか関数名とか変な感じでよく読めないです
やろうとしたのは、まずファイルa.doxから
Selection.MoveEndUntil Cset:="[",
Count:=wdForward
みたいにして、[の前までを選択してファイルの一番上にコピペ
次はb.dox(の前までを選択してファイルの一番上にコピペ
これを交互に繰り返せば行けるのではないかと思ったのですが…
482:デフォルトの名無しさん
13/10/09 00:58:59.94
名前.dot
b.dotx
a.docx
b.dox
訳がわからん
483:デフォルトの名無しさん
13/10/09 01:01:11.58
おっと
a.dox
ってのも追加か
484:デフォルトの名無しさん
13/10/09 20:28:46.52
>>478
WordのVBAはあまり使わなかったが、下の様なフローで出来た、Word2007使用。
1:文書a.docxを開く、全文を変数に代入、文書a.docx閉じる、各行に分割し配列に記録
2:文書b.docxを開く、同上
3:VBA入りの結合用ファイルをアクティブに
4:配列上で各行に分割
5:カッコの位置を工夫し、ファイル名を入れた物をWordに書き出し
6:Word上で、ソート
7:Word上で、各行のカッコの位置を戻す
WordのVBAは、慣れていないから難解。
485:デフォルトの名無しさん
13/10/09 20:37:56.64
書式と校正履歴はどこ行った
486:484
13/10/09 20:43:02.94
書式と校正履歴が必要なんだ、じゃだめだ。
あぁ勘違いでした。
487:484
13/10/09 23:16:42.80
WordのVBAだけでやると、校正履歴・書式も残る物が出来た、
Wordは変な癖が有るし、いゃ~めんどくさい、WordのVBAなんかもう触りたくない。
でもいい勉強になった。
488:デフォルトの名無しさん
13/10/09 23:44:09.07
WordはVBAじゃなくてもよく分からないからな。
余り好きじゃない。
489:デフォルトの名無しさん
13/10/16 08:28:03.32
エクセル2003です。
コマンドボタンを直接エクセル画面に貼り付け➡コマンドボタンのプロシージャにプリントアウトのプログラムを記入➡コマンドボタンをクリック➡コマンドボタンが左側にかってに移動(プリントアウトは出来る)
コマンドボタンが左側に移動しない方法を教えて下さい。
490:デフォルトの名無しさん
13/10/16 09:38:11.85
>>489
普通の「→」を使わないのが気に障るから教えない
491:デフォルトの名無しさん
13/10/16 13:43:15.14
効いてる効いてるw
492:デフォルトの名無しさん
13/10/16 13:48:09.87
2003ってサポート終了するポンコツじゃん。
いまさらそんなの使えるようになっても食っていけないよ。
493:デフォルトの名無しさん
13/10/16 18:27:10.73
>>491
お前は早く普通の→を入力できるように頑張れよw
494:デフォルトの名無しさん
13/10/16 18:55:25.96
iPhoneからの入力だと
最初に出るね。➡︎。
495:デフォルトの名無しさん
13/10/16 21:51:27.03
Appleは、そういう独善的なところが嫌い。
そういうマシンに心酔するユーザも嫌い。
496:ピラフ
13/10/20 02:37:44.24
>>495
ピラフのことは?好き?
497:デフォルトの名無しさん
13/10/20 02:45:46.58
たまにキチガって暴れるから嫌い。
498:デフォルトの名無しさん
13/10/20 06:02:53.70
桃白を含めて好きって程でもないけど嫌いじゃない。
ひと波乱あった今のEXCELVBAスレなら書き込むと荒れるかもしれないけど意外に有難がられるかもしれない
499:デフォルトの名無しさん
13/10/21 00:45:14.12
荒らし投稿した時点で既に論外
500:デフォルトの名無しさん
13/10/22 18:20:53.28
助けてください!
Aセルの中に、東京都千代田区永田町1-7-1と入力されてます。
Aセルの中にある数字だけを抽出する事は可能でしょうか?(Bセルに1 Cセルに7 Dセル1)
可能であれば、マクロ組んでいただけませんか?
501:デフォルトの名無しさん
13/10/22 19:36:40.31
簡単過ぎて食指が動かないからやだ
502:デフォルトの名無しさん
13/10/22 20:40:01.55
>>500
Range("B1")=1
Range("C1")=7
Range("D1")=1
503:500
13/10/22 20:40:34.13
では難しくしましょう。
Aセルの中の数字は、3つだけとは限りません。
「東京都千代田区大便町1-2-3-101」みたいに4つのこともありますし、
0個のときも、1個のときも、2個のときも、5個以上のこともあります。
さあ、お願いいたします。
504:ピラフ
13/10/22 20:42:51.33
>>503
ピラフ挑戦してみようかな
4つ目の数字はEセルってことでいいの?
505:デフォルトの名無しさん
13/10/22 20:52:19.98
>>484
478です
お返事遅くなり申し訳ありません。
レスありがとうございます。
事故に遭い、レスをすることが出来ませんでした
皆様も車にはお気をつけて。
506:デフォルトの名無しさん
13/10/22 21:02:14.04
>>503
それ、難易度の変化無いです。
つか>>500本人とは思えんww
507:デフォルトの名無しさん
13/10/22 21:19:32.45
>>503
ちょっと前にEXCEL VBAのスレで似た様な質問が挙がってたね。
508:500
13/10/22 21:43:36.77
みなさん、すみません。
住所の数字が増えた場合は、EセルFセルと右に移動できたらと思います。
よろしくお願いします。
509:506
13/10/22 21:51:51.73
でも実際、中小企業の事務所ってこういうレベルなんだよね。
510:デフォルトの名無しさん
13/10/22 22:00:03.49
住所のデータは分割しない方がいいよ
塊全部でひとつなのだから
511:ピラフ
13/10/22 22:00:28.83
>>503
動きますかしら
URLリンク(friendpaste.com)
512:デフォルトの名無しさん
13/10/23 03:14:08.82
わけがわからない
なんのために番地をバラバラにするのか
漢数字には対応しなくていいのか
本当は処理したいのは住所じゃないと見た
513:デフォルトの名無しさん
13/10/23 04:45:42.24
そもそも、Aセルと言うのが俺には理解できないのだが
今だとA列にセルは100万個ぐらいあるんだがなぁ
514:デフォルトの名無しさん
13/10/23 08:19:36.09
>>513
マジで言ってんのか
馬鹿じゃないのか…
515:デフォルトの名無しさん
13/10/23 08:36:05.32
やっぱりまともなのはピラフちゃんだけだね
ピラフちゃん好きだよ
516:デフォルトの名無しさん
13/10/23 08:59:22.90
住所の分割の必要性はまじでわからんな
517:デフォルトの名無しさん
13/10/23 10:48:12.66
アスペかよ
518:デフォルトの名無しさん
13/10/23 11:37:44.47
「住所から数字だけ抽出」をfor~nextの自作で試してみた
25万件で1分55秒、50万件で3分33秒(シングルコア、画面更新・再計算停止)
A列全ての1048576件はこれ以上と思うので試してない。
519:500
13/10/23 15:33:24.66
できたわ。
カス共サンクス
520:デフォルトの名無しさん
13/10/23 17:45:21.39
いえいえどういたしました
521:ピラフ
13/10/23 19:59:57.25
>>519
なん・・・だと・・・
522:デフォルトの名無しさん
13/10/23 20:04:49.42
VBA初心者です。教えて下さい。数値で0があった時、その下のセルは斜線をつけるようにしたいです。また、0以外の数値の時は下のセルに薄いグレーの網掛けをしたいです。試してはいるもののうまくできません。よろしくお願いします。
523:デフォルトの名無しさん
13/10/23 20:16:17.55
>>522
ここのスレでもいいけど、
EXCELのVBAに関してはこっちの方が賑わっているから
返事も早いし色んな人の意見が聞けると思うよ。
Excel VBA 質問スレ Part32
スレリンク(tech板)
524:デフォルトの名無しさん
13/10/23 20:20:30.14
>>522
とりあえずマクロの記録ってのを試してみよう。それが判らないってんでは話にならん
525:デフォルトの名無しさん
13/10/23 20:24:21.16
>>523
自演で賑わってるように見えるだけでしょ。
>>522はクレクレ君のようだからそっちでいいと思うけど。
本スレはこっち
Excel VBA 質問スレ Part32
スレリンク(tech板)
526:デフォルトの名無しさん
13/10/23 20:33:33.23
522です。ありがとうございます。教えていただいたスレに行って見ます。
527:デフォルトの名無しさん
13/10/23 20:39:08.22
>>525
行ってみましたが、何故本スレなのに10レスしか付いていないんでしょうか?
528:デフォルトの名無しさん
13/10/23 21:00:15.81
>>527
元々過疎スレだから。
コード作成依頼スレは自演してるからレス数が多くついてるだけ。
実際スレの中で自演してるって認めてるし。
スレリンク(tech板:92番)
92 返信:デフォルトの名無しさん[sage] 投稿日:2013/10/17(木) 21:17:20.32
>>91
ここまで全部俺の自演でもいいから
とっとと自分の立てた糞スレに帰りなさい。
羨ましそうに荒らしに来ない様に。
因みに過去スレが見れるのならテンプレを見れば
こっちが本スレなのが分かると思うけど。
Excel VBA 質問スレ Part32
スレリンク(tech板)
529:デフォルトの名無しさん
13/10/23 21:08:19.13
>>528
過去スレみて大体状況が分かりました。
何故レスが少ないのかも理解しました。
ありがとうございました。
530:デフォルトの名無しさん
13/10/23 21:14:56.55
w
531:デフォルトの名無しさん
13/10/28 08:01:59.06
ExcelのVBAからWebページを操作したいのですが
(1)すでにあるページがひらいてるか調べる
(2)もしひらいていたらそのページをアクティブにして前面に出し、そうでなければ新しく開く
という手順を実行したいです。
苦労してるのは、InternetExplorerというブラウザを使っているのですが
そのタブ機能があるのでブラウザは1個だけどその内部にタブが複数開いてるのを
どうアクティブにするかで悩んでいます。
どうかよろしくお願いします
532:デフォルトの名無しさん
13/10/28 16:28:16.09
嫌です
533:デフォルトの名無しさん
13/10/28 18:17:37.88
>>531
タブを複数開いていてもプロセスはタブごとに個別にあるよ
534:531
13/10/28 23:01:50.31
>>533
なるほどぉ。
ありがとぅ。
でも該当のやつをアクティブに、つまり前面に出すにはどうやるの?
535:デフォルトの名無しさん
13/10/28 23:12:22.77
>>534
今どこまでできてんのか見せてみて
536:デフォルトの名無しさん
13/10/29 00:08:08.87
>>534
しらね
IEのオブジェクトをFor Eachでとれるんじゃね?
それかOSレベルでのプロセス見つけてアクティベートとかできるんじゃね?
しらねしらねー
537:デフォルトの名無しさん
13/11/02 23:27:43.69
unlhaのAPI絡みの話ってここでしても良いんですか? ExcelのVBA上からなんですけど
538:ピラフ
13/11/02 23:35:26.33
>>537
いんじゃない。書いちゃいなよ。
539:デフォルトの名無しさん
13/11/02 23:47:49.12
537です
ソースは
URLリンク(memopa.applest.net)
に
内容は
このマクロがあるフォルダにあるlzh圧縮ファイルを解凍し、出来たフォルダが xxxx なら それに " old" を付加しもう一つ xxx を作るというものです
解凍処理そのものは いろんなサイトで見てwなんとか出来たんですが、時たま(これが?なんですが)UNLHAが動作中ですというメッセージを
出して落ちてしまうことがあります。
んでUNLHAのドキュメントでは UnlhaGetRunningとかで動作確認をするとか。これをVBA上で実現する方法をしりたいのですが。
↑に貼ったソースでは該当部分はコメント化してあります。
'Public Declare Function UnlhaGetRunning Lib "UNLHA32.DLL" Alias "Unlha" () As Boolean
'If UnlhaGetRunning() Then
' MsgBox "UNLHAが現在動作中 一旦このブックを閉じて再度実行してください"
' Exit Sub
'End If
の部分です
540:デフォルトの名無しさん
13/11/03 02:02:16.59
>>539
UNLHA32.DLL は複数同時実行に対応していないんだから、
調子に乗って連続で実行してる時とかに間に合わなくて普通にExitしてるんだろ
適当にループでもさせとけば?
541:デフォルトの名無しさん
13/11/03 08:18:57.49
>>540
レスありがとです。unlha32.dllはスレッドセーフではないっていうことですよね。
で、その「適当にループさせる」ってのは具体的にはどういうことなんでしょうか
542:デフォルトの名無しさん
13/11/03 08:37:12.78
>>539
使ってないからよくわからんが引数とか戻り値の型とか違うんだけど?
URLリンク(www31.ocn.ne.jp)
543:デフォルトの名無しさん
13/11/03 11:51:58.89
>>542
api定義の部分はさすがに同じだと思うのですが…
後、引数については、、取り敢えずあとで見返してみます^^;
自分のソースの
'UNLHA32.DLL呼出API
Public Declare Function UNLHA Lib "UNLHA32.DLL" Alias "Unlha" _
(ByVal hwnd As Long, ByVal szCmdLine As String, _
ByVal Lpstr As String, ByVal wsize As Long) As Long
Dim lngRet As Long
URLリンク(www31.ocn.ne.jp)
Declare Function Unlha Lib "UnLHA32.DLL" _
(ByVal hwnd As Long, _
ByVal szCmdLine As String, _
ByVal szOutput As String, _
ByVal dwSize As Long) AS Long
Dim lngResult As Long
544:デフォルトの名無しさん
13/11/03 12:06:57.35
>>543
はあ? >>539 は自分のソースじゃないのか?
悪いけど、抜けるわ。
545:デフォルトの名無しさん
13/11/03 16:10:28.85
>>541
俺は>>540じゃないけど
スレッドセーフって意味わかってる?
今までの情報ではunlha32.dllがスレッドセーフかどうかは判断できない
適当にループさせるってのは、何も考えなければ
実行中の状態が実行中で無くなるまで、ひたすら実行中かどうかをチェックするってことだ
極端に言えばこんな感じ
Do While UnlhaGetRunning()
Loop
実際には時間切れとかシステムの占有率とか考えないとダメかもしれんが
546:デフォルトの名無しさん
13/11/03 17:07:50.83
>>545
情報不足ですいません
Unlhaがスレッドセーフでないってのは、unlha32.dllの作者である人がそのAPI 説明ファイルの冒頭で
UNLHA32.DLL はスレッド・セーフではありません。(^^;)
従って, 複数スレッドからの同時使用は行えませんので
注意してください。
と書いているんで、そうなのですかということで。
547:デフォルトの名無しさん
13/11/03 18:21:28.23
>>546
作者がそう言ってるのならそうでしょう
そもそもVBAはシングルスレッド前提の言語なんで、VBAで複数スレッドから同時に使用するのは大変ですが
548:537
13/11/04 21:38:21.65
宣言部分が間違っていたみたいで
Public Declare Function UnlhaGetRunning Lib "UNLHA32.DLL" Alias "Unlha" () As Boolean
↓
Public Declare Function UnlhaGetRunning Lib "UNLHA32.DLL" () As Boolean
で
If UnlhaGetRunning() = True Then
MsgBox "UNLHA動作中"
Exit Sub
Else
MsgBox "test **** UnlhaGetRunningの動作確認 UNLHAはFALSE ****"
End If
ではtest **** UnlhaGetRunningの動作確認 UNLHAはFALSE ****が表示され、以下の処理も正常に終了
これで正しいのかどうか不安には思いながらも取り敢えずお終い
549:デフォルトの名無しさん
13/11/22 15:38:59.33
VBAからZip32jを呼び出してファイルをZIP形式で圧縮しているのですが、
ファイル名が「@@file.xls」のようにアットマークで始まるファイルが
圧縮できません。
strCommand = "-u ""file.zip"" ""@@file.xls"""
lngSize = Len(str)
RC = Zip(hwnd, strCommand, str, lngSize)
ざっくり書くとこんな感じでZip32jに渡しているのですが、
こういう場合はZip32jにどういう風にファイル名を渡せば
良いのでしょうか。
550:デフォルトの名無しさん
13/11/22 18:15:51.32
えすけーぷしーけんす?
551:デフォルトの名無しさん
13/11/22 18:31:02.89
ふるぱす?
552:デフォルトの名無しさん
13/11/22 18:31:42.41
ティンコ?
553:デフォルトの名無しさん
13/11/22 20:35:05.46
マンコ?
554:デフォルトの名無しさん
13/11/22 20:39:15.37
(´・ω・`)b
555:555
13/11/22 20:40:13.16
555げっち(´・ω・`)b
556:デフォルトの名無しさん
13/11/25 17:34:43.29
質問です。
Set res = Rows(1).Find(What:="2013")
これでオブジェクトが必要です。とエラーが出てしまうのですが、原因わかる方いますか?
検索結果がない可能性があるので、この後resのNothing判定をする予定です。
557:デフォルトの名無しさん
13/11/25 17:45:00.48
>>556
この1行ならエラー出なかったょ
他でエラー発生してるんじゃない?
558:デフォルトの名無しさん
13/11/25 17:56:44.97
>>556
Findの罠だな
これで動くこともあるからタチが悪い
面倒でも検索条件を省略せずにきちんと書いてみ
559:デフォルトの名無しさん
13/11/25 17:57:01.51
>>556
Dim res の記述はどうなってる?
'Dim res As Integer 'オブジェクトが必要です エラー
'Dim res As Single 'オブジェクトが必要です エラー
'Dim res As Double 'オブジェクトが必要です エラー
'Dim res As String 'オブジェクトが必要です エラー
を再現した。 By 557
560:デフォルトの名無しさん
13/11/25 18:04:14.58
実際のコードです。エラーのあとデバッグを選択するとp.findの行で止まるので間違いないと思います。
Dim res As Variant ←これはいれてもいれなくてもエラーになります。
以前自分が作ったコードでは、同じような記述で動いていたのでこれでいいのかと。。。
省略せずに書くというのは、どこまで書けばいいのでしょうか?
p = Rows(1)
o = Year(DateAdd("m", mo, Cells(r, 2)))
Dim res As Variant
Set res = p.Find(What:="2013")
561:デフォルトの名無しさん
13/11/25 18:05:49.51
set p = rows(1)
562:デフォルトの名無しさん
13/11/25 18:08:29.33
ありがとうございます。
解決しました・・・・ほんとバカで申し訳ない。
563:デフォルトの名無しさん
13/11/25 18:55:09.63
ズコー
564:デフォルトの名無しさん
13/11/26 12:53:02.32
プロシジャが
operation1
operation2
operation3
とあって通常だったらoperation1からoperation2,opration3を
一連の流れで実行するのがあります。
operation3にはoperation1でGetOpenFilenameで得たフォルダ名を引数にして
call opration3(フォルダ名)
と書いてるんですが、このoperation3だけを単独で実行したい場合
どうします?勿論フォルダ名をどうにかして引数に与えるなりしないといけないん
ですが。
565:564
13/11/26 15:46:06.67
ope3_tandokuプロシジャを作り、そこでフォルダを与え、このプロシジャ中で
operation3(フォルダ)
で、このope3_tandokuをボタンで起動することにしました
566:デフォルトの名無しさん
13/11/26 19:14:50.03
よくできました
567:デフォルトの名無しさん
13/11/27 19:59:41.41
call operation3(フォルダの取得関数())じゃないのか、普通は
568:デフォルトの名無しさん
13/12/10 21:24:24.39
64ビット版Excel VBAでmscomctl.ocxのListViewが使えなくて困っています。
ListBox以外で、64ビット版対応方法を知っている人はいませんか?
569:デフォルトの名無しさん
13/12/29 13:03:57.51
ググれば出てくるじゃん
570:デフォルトの名無しさん
13/12/29 20:03:14.90
マクロでリストを作ろうと思い、試しに簡易版のマクロを組みました。
しかし、リストで参照してしるところが相対参照したいのですが、Formula1:="=$A$25:$D$25をどう変更したらいいでしょうか?
ご教示ください。
Sub Macro1()
'
' Macro1 Macro
Range("E24").Select
ActiveCell.Offset(1, 0).Select
Do
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$A$25:$D$25"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End With
ActiveCell.Offset(25, 0).Select
Loop Until ActiveCell.Row = 100
End Sub
571:デフォルトの名無しさん
13/12/29 20:07:55.37
すいません
下げわすれてました。
572:デフォルトの名無しさん
13/12/29 23:10:51.30
全くソース読む気も無いが、$A$25:$D$25は相対指定じゃない事はわかるぞ
A25:D25でいいんじゃないかね
573:デフォルトの名無しさん
13/12/30 07:32:19.42
>>572
そこは絶対参照のままでもいいんじゃないの?
やりたいことが、漏れなく書かれてるわけじゃないから違ってるかも知れないが
エスパーすると、たぶんこういうことがしたいのだと思われ
>>570
Sub Macro1()
Dim r As Long
For r = 25 To 75 Step 25
Cells(r, 5).Validation.Delete
Cells(r, 5).Validation.Add xlValidateList, xlValidAlertStop, xlBetween, _
"=" & Cells(r, 1).Resize(1, 4).Address
Next r
End Sub
因みに相対参照にするなら、.Address → .Address(0, 0)
しかし、自分の知ってる事というか自分が思い描いてることは
相手も把握している前提で話をするおバカさんって厄介だよね
ここはVBAの質問に答えるスレのはずなのに、VBAレベル的には初心者でも回答できるものばかりだが
正しい日本語で齟齬無く要望を伝える能力に欠けた奴の意図をエスパー的に酌み取る事の方ばかり
高レベルの能力が必要とされている気がする
まぁ俺もエスパーは本分じゃないんで、上記のコードも要望通りじゃないかもしれないけどw
574:18
13/12/30 09:44:13.82
>>573
> .Address(0, 0)
とか書く奴に偉そうなこと言われても...
575:デフォルトの名無しさん
13/12/30 09:44:24.16
質問がある。
その質問内容についてはすべてエスパーしてくれ。
で回答は具体的で詳細に。
ではよろしく頼む。
576:デフォルトの名無しさん
13/12/30 10:24:26.23
>>574
何勘違いしてるの?
577:18
13/12/30 12:38:10.77
>>576
>>574 の指摘内容が理解できてないの? (w
578:デフォルトの名無しさん
13/12/30 12:38:38.33
すいません。
事の発端の>>570です。
自分のやりたいことを詳細に書き込まず、予想して補完してもらうような、質問をして申し訳ありませんでした。
>>572さん>>573さんありがとうございました。
579:デフォルトの名無しさん
13/12/31 10:44:06.16
>>577
まぁ、、、がんばれw
580:18
13/12/31 11:12:02.61
>>579
理解できてないのか...
て言うか、普通インテリセンスが効くから 0 なんて書くわけないと思うんだが。
581:デフォルトの名無しさん
13/12/31 13:03:01.75
もしかしてAddress(False, False)って書け、なんてレベルの話?
しかし、Addressの第一、第二引数は、規定値がTrueとはいえ、Boolean型ではなくVariant型で
それ故にインテリセンスも効かないし、そういうコードの明示性で言うなら、25や75を定数化しろって方が先な上に
こういう金を貰えるわけでもない場では明示性や読解性を犠牲にしてでも簡略化するのは常套手段なので
Addressの第一、第二引数には効かないインテリセンスがどうこう言ってることからしても、
0ではなく、Falseや相対参照を意味する定数を定義してそれを使えなんて単純な話じゃないよね?
いったい、どう書くのが正しいと言いたいのだろう?
582:デフォルトの名無しさん
13/12/31 20:31:10.76
あんまり虐めるな
583:デフォルトの名無しさん
13/12/31 20:45:45.07
エクセルは表計算が少しできます。マクロとかは知りません。
VBAをマスターしたく本屋へ行きましたがたくさんあり悩みました。
「10日間でマスター・・・」みたいなのがありましたが初心者でも大丈夫で
しょうか?そもそも10日間でマスターできるほど簡単?とは思えないのですが
初歩ですかね?
584:デフォルトの名無しさん
13/12/31 21:05:06.28
>>581は虐めてはいないだろ
>>574が井の中の蛙なだけ
小山の大将が、飛行機から見下された
585:デフォルトの名無しさん
13/12/31 21:19:31.20
>>583
初心者の入門用には、その程度から始めるのが良いかも。
ただ、同時に分厚いVBAの辞書みたいなのも買う事を勧める。
少しできるようになったら、疑問が出るだろうから本を買足すのも良いだろう。
また、「参照設定」での機能を説明している本は少ないので、
そこら辺はネット併用で情報収集して行けばよいと思う。
586:デフォルトの名無しさん
13/12/31 21:41:38.76
>>583
そもそも何がしたいかなんて人によって違う
デカい本屋で一日潰して立ち読みでもしてみて、一番自分がやりたいことが
分かるように書かれてる本を買え
ただ関数・メソッドの癖なんかは一々細かく覚えてられんので、リファレンス本は持っておけ
587:583
14/01/01 10:02:50.80
皆さん、ご丁寧に回答頂きありがとうございます。
588:デフォルトの名無しさん
14/01/01 10:42:09.00
>>585
「参照設定」を話題にするということは、これはものすごく便利なものということですね?
IEを操作するという本で見たことだけはあるけど
これは何のために使い、何が便利なのですか?
589:デフォルトの名無しさん
14/01/01 16:04:34.73
>>588
キーワードが分かってるなら少しはggks
便利かどうかは自分で判断しろ
590:588
14/01/04 10:07:28.34
>>589
そりゃないよかあちゃん。
参照設定とはなにかどなたかおしえてくださいませんでしょうか?
591:デフォルトの名無しさん
14/01/04 10:44:10.13
>>590
アプリケーションを「インストールする」みたいなそれ単体では無意味な言葉w
592:588
14/01/04 10:46:02.02
>>591
レスありがとうございます。
ん、どういうことでしょう?
言葉の意味がよくわからないのですが・・・
593:デフォルトの名無しさん
14/01/04 12:43:00.21
アプリケーションをインストールするとは、広義では、アプリケーションを実際に使える状態にすることをいう
レジストリ登録は必須ではない
594:デフォルトの名無しさん
14/01/04 12:48:49.63
USBメモリに入れて持ち運べるアプリケーションも
それを入れたUSBメモリを接続すること自体がインストール
595:588
14/01/04 13:10:34.76
?
596:デフォルトの名無しさん
14/01/04 15:59:41.71
SDDのインストロールをファイルしてディスクトップのコピペをオーエスするんだよ
597:デフォルトの名無しさん
14/01/07 16:30:54.74
>>588
別に詳しいこと知らなくても使い方だけ知ってればそれでいいじゃん
俺も知らないけど特に困ってないよ。
とりあえずエクセルの標準的な設定では使えない機能が
ライブラリっていう形で用意されてて、
それを参照するように設定することでライブラリの機能が利用できるようになるってことらしいよ。
参照設定の内容はブックごとに保存されるから別のPCにコピーしても同じように動く。
ただし、用意されてるライブラリはエクセルのバージョンごとに違ってるから
コピー先のマシンにインストールされてるエクセルのバージョンによっては
エラーが出て動かない場合もある(らしい)。
あと、参照設定しないでライブラリの機能を利用することも出来るけど、
その時はインテリセンスが働かないからコード書くときにちょっと面倒だったりする。
一例としてFileSystemObjectを使うときには
Microsoft Scripting Runtimeっていうライブラリを参照設定しておくと
Dim fso As New FileSystemObject
って宣言するだけでFileSystemObjectが使えるけど、
参照設定してないと
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
みたいに書かないといけない。
そして、参照設定していればコード中でインテリセンスが働くから
fso.とタイプしたらその後に続くメソッドとかが表示されるけど
参照設定してないとそれが出てこない。
大体こんな程度しか知らないけど、今のところ特に困ってない。
598:デフォルトの名無しさん
14/01/07 17:40:10.13
>>588
プログラミングの学習は、いくら言葉を覚えて知識だけ詰め込んだって全然ダメだ。
最初はサンプルの丸写しでもいいから、とにかく手を動かせ。
599:デフォルトの名無しさん
14/01/07 19:49:40.93
> ただし、用意されてるライブラリはエクセルのバージョンごとに違ってるから
エクセルではなく大抵はOSやIEな
よく使用されるのは、Excelに付属するライブラリより、OSやIE付属のライブラリだから
例に挙げてるFSOも、Excel付属ではなく、OSに付属するIEに付属するWSHに付属するライブラリだから
600:597
14/01/07 20:31:40.45
>>599
そうなんですか、それは知りませんでした。
(この辺が良く知らないと言う由縁)
教えていただきありがとうございました。
601:デフォルトの名無しさん
14/01/08 04:38:24.94
FSOはもともとOS付属ではなかったが
参照設定は、ある共通ルールに従って作られたプログラムを使用するために使うもの
別に何かの付属のライブラリじゃなくても良いんだぞ
602:デフォルトの名無しさん
14/01/08 05:17:40.58
FSOが付属するようになったのはWin98SEからだっけ?
確かWin95やWin98だと、IEのバージョンアップするか、WSHの単体パッケージ入れる必要があったような
603:デフォルトの名無しさん
14/02/07 11:57:08.30
intにキャストすると小数部四捨五入するのやめれ。
604:デフォルトの名無しさん
14/02/07 13:53:01.88
>>603
暗黙の変換に頼る方が悪い
適切な関数なり数式なりで処理しろ
605:デフォルトの名無しさん
14/02/07 14:09:14.80
ところがclng()より速いのがVBA
606:デフォルトの名無しさん
14/02/07 23:57:24.63
>>603
四捨五入じゃないんだけどな
それ以前にintにキャストってそれホントにVBAの話か
607:デフォルトの名無しさん
14/02/08 00:51:47.10
CType関数は小数点以下丸めることがあるから、小数切り捨てたい場合は使ったらあかんのね。
608:デフォルトの名無しさん
14/02/08 01:19:57.82
>>607
切り捨ては丸めの方法の一つだから、その日本語はおかしい
609:デフォルトの名無しさん
14/02/13 14:00:02.20
テキストボックスに文字を設定する時に
通常はチェンジイベントで設定された文字を処理するように書いてますが
とあるタイミングではチェンジイベントを実行したくないのです
その、とあるタイミングの前に、テキストボックスのEnabledプロパティをFalseにすれば
チェンジイベントが発生しないのかと思ったら発生しますね
そうなると、とあるタイミングの前に、グローバル変数を設定して
イベントの中でその変数を見て抜けるようなベタな方法しかないですか?
610:デフォルトの名無しさん
14/02/13 14:12:23.89
>>609
そこで一時的に全部のイベントを殺してもいいのならEnableEvents
止めたいのがテキストボックスのチェンジイベントだけなら自前でフラグ変数を用意しかない
611:デフォルトの名無しさん
14/02/13 14:24:24.41
>>610
VBAにはそんなのがあるのですか、良いですね
VB6のスレが無かったので、同じだろうと思ってここでお聞きしましたがVB6にはないようでした
ありがとうございました
612:デフォルトの名無しさん
14/02/13 14:56:01.33
EnabledがFalseでイベント発生したっけ?
イベントが発生してから無効にしてるんじゃないかと言う気がするが
613:デフォルトの名無しさん
14/02/14 12:48:25.84
説明が足りませんでした
Enabled=Falseでユーザー操作はできなくなりますが
コードからは操作できて、その時にイベントが発生してしまいます
614:デフォルトの名無しさん
14/02/14 13:24:45.38
VBAならAfterUpdate使え
それ以外なら知らん
615:デフォルトの名無しさん
14/02/15 20:19:21.38
Enabled=Falseの時のイベント発生を除外したいなら、
イベントハンドラでEnabledの値を確認すれば解決。
616:デフォルトの名無しさん
14/02/16 07:35:43.11
なるほど、本来の使い方ではないけど、それでいいわけですよね
対象のコントロールが少ないならグローバル変数を用意するよりスマートだし
617:デフォルトの名無しさん
14/02/16 21:56:15.35
スマートは大事
618:デフォルトの名無しさん
14/03/12 02:35:55.66 oH1Ugruw
ID発行記念カキコ
619:デフォルトの名無しさん
14/03/15 07:03:26.55 FLjN0SBh
実現の可否が分からないため、質問させて下さい。
Excel VBAでShell関数を使い、Powershellを呼び出し、その出力結果をtxtに出力して取り込んでいます。
Powershellを走らせて待っている間、Powershellの処理に時間がかかる場合に「(応答なし)」が表示されます。
待っていると動いてくれるので「(応答なし)」は表示させたくないのですが、DoEventsを使ってもだめでした。
「(応答なし)」を表示させない方法はあるのでしょうか。
620:デフォルトの名無しさん
14/03/15 07:37:44.08 kKPzvMNA
「Powershellを走らせて待っている間」について詳しく
621:デフォルトの名無しさん
14/03/15 07:47:18.40 IpiW3W82
ついでに、その応答なしってどこに表示されるかも
622:デフォルトの名無しさん
14/03/15 10:15:49.53 FLjN0SBh
>>620
>>621
powershellで「compare-object」という比較のコマンドを実行しています。
比較するデータと結果の差分が多いと出力に時間がかかり、作成したユーザフォームの左上にあるcaptionに「(応答なし)」と表示されてきます
(10秒位経っただけで表示されてしまう印象)。
その「(応答なし)」を表示させない方法があるのかどうか、知りたいと考えています。
623:622
14/03/15 10:19:01.52 FLjN0SBh
処理の流れとしては、
ユーザフォームでファイルを選択させて、
もろもろのオプションを指定した上で、
実行してpowershellを呼び出してcompare-objectで比較して出力、
という内容になります。
624:デフォルトの名無しさん
14/03/15 10:33:33.89 bmQ5jObQ
VBA側のCaptionに表示させたくない文字列の内容が分かってるなら、
単に条件分岐させて消すなりなんなりすればいいじゃん
625:622
14/03/15 11:08:40.69 FLjN0SBh
>>624
すいません、正式名称が何というのか分かっていなかったのですが、「タイトルバー」ですかね、、、
Captionの右側に「(応答なし)」が表示されてきたので、622の箇所ではCaptionと書いてしまっています。
622の質問の段階で、Captionで意味が通じているようであれば、
条件分岐をさせて「(応答なし)」を出さない方法がよく分かっていないです。
626:デフォルトの名無しさん
14/03/15 11:52:35.81 kKPzvMNA
『待っている間』について詳しく
627:622
14/03/15 14:12:17.82 FLjN0SBh
>>626
コードの必要な箇所を抜き出すと以下になります。
======================
Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Public Const INFINITE As Long = &HFFFF
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
If ~ Then
Dim TaskId As Long
Dim hProc As Long
DoEvents
TaskId = Shell("powershell " & Chr(34) & "& { " & ~ & "}" & Chr(34), vbMinimizedNoFocus)
hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, TaskId)
If hProc <> 0 Then
Call WaitForSingleObject(hProc, INFINITE)
CloseHandle hProc
End If
End If
======================
実のところ、shell関数の所で止まっていると思い込んでいたのですが、確認したところだと、powershellというよりは後続の同期処理、「Call WaitForSingleObject(hProc, INFINITE)」のところで起きているようでした。
おそらくこの部分を変えてやればうまくいくと思うのですが、しかしどうすればいいのか、分からない状況です。
628:デフォルトの名無しさん
14/03/15 16:15:36.48 3ah5yf0J
>>627
同期処理用のAPIではどうしても応答なしになってしまう
Powershellのスクリプトの最後で、処理の完了を通知するぐらいしか思いつかない
たとえばテンポラリファイルを使うとか原始的な方法で
629:デフォルトの名無しさん
14/03/15 16:37:06.66 IpiW3W82
>>627
> WaitForSingleObject
一番最後の引数に 1000 ぐらいを指摘して、1秒毎にポーリングすればいい。
タイムアウトかプロセスが終了したのかは戻り値を見ればわかる。
630:デフォルトの名無しさん
14/03/15 16:42:00.26 bmQ5jObQ
>>628
Function findMyBook($bookname)
$books = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
foreach ($mybook in $books.WorkBooks){
if ($books.Name -eq $bookname){
return $mybook
}
}
実行するVBAのブック名が固定されるんなら、PS側の必要な処理が終わった後に
PS側でそのブック名見つけてやればいいんじゃないかね多分
631:622
14/03/15 22:02:16.82 FLjN0SBh
>>629
VBAを以下のように修正し、応答なしが出なくなったことを確認しました。
======
(前)
If hProc <> 0 Then
Call WaitForSingleObject(hProc, INFINITE)
CloseHandle hProc
End If
======
(後)
Dim RC As Long
If hProc <> 0 Then
Do
RC = WaitForSingleObject(hProc, 1000)
DoEvents
Loop While (RC = &H102)
If RC <> 0 Then
Exit Sub
End If
CloseHandle hProc
End If
======
>>630
VBAの方でうまくいったのでpowershellの方は試していませんが、別の機会に試してみます。
皆様、ご協力ありがとうございました。
632:デフォルトの名無しさん
14/03/15 22:29:46.48 IpiW3W82
>>631
> If RC <> 0 Then
> Exit Sub
> End If
> CloseHandle hProc
RC <> 0 の時もハンドルクローズしないとリークするよ。
633:デフォルトの名無しさん
14/03/16 09:30:39.93 cyT7e+/z
>>632
ご指摘助かります。
入れておきます。
634:デフォルトの名無しさん
14/03/30 01:09:57.92 HkRxLSsC
配列(A,B,C,D)
配列(123,456,789)
これを下記のようにDebug.Printしたいのですが、コードをご教授ください。お願いします。
A123
B123
C456
D456
E789
F789
635:ピラフ
14/03/30 02:33:17.39 aRmbpBvo
>>634
ピラフが教えてあげちゃう。
Dim A
A = Array("A", "B", "C", "D", "E", "F")
Dim B
B = Array("123", "456", "789")
Dim I
I = 0
Dim E
For Each E In B
Debug.Print A(I) & E
Debug.Print A(I + 1) & E
I = I + 1
Next
636:デフォルトの名無しさん
14/03/30 03:21:41.62 HkRxLSsC
>>635
ピラフ様
あなたが私を救って下さいました。ありがとう。(心臓)
637:デフォルトの名無しさん
14/03/30 07:21:17.99 5cM6x3wc
二人ともよく見ろ
できてないじゃん
タオパイの自演か?
638:デフォルトの名無しさん
14/03/31 01:17:01.74 +/Q0rb5y
Debug.Print A(I + I) & E
Debug.Print A(I + I + 1) & E
639:デフォルトの名無しさん
14/03/31 13:20:56.18 dIVDD8y4
天津飯が好きです@22歳OL
640:デフォルトの名無しさん
14/03/31 19:39:21.01 +xOJ5BKc
>>638
なんじゃそりゃw
ふつーは
I = I + 2
だろ
641:桃白白 ◆9Jro6YFwm650
14/03/31 21:27:38.02 N162Y8AS
>>639
桃白白のことは?好き?
642:デフォルトの名無しさん
14/03/31 21:47:20.15 DtbGifhU
桃(も)白(ちろ)白(ん)
643:デフォルトの名無しさん
14/04/01 23:08:43.56 iMQ7tFIo
Excel VBAで、シートのOELobjectsとしてファイルを追加しましたが、
そのファイルをまたファイルとして出力する方法がよくわかりません。
ご教示いただけないでしょうか。
一時的なバックアップとしてファイルをシート上に保管して、問題があったらそこからファイルを復元しようとしてます。
644:デフォルトの名無しさん
14/04/17 08:27:13.26 112XWAfL
ここは貼ってもいいんでしょうか?
作ったものが全く思い通りに動かず悩んでます。
初心者なので別スレがあるのであれば教えていただけますと移動いたします。
645:デフォルトの名無しさん
14/04/17 09:14:36.93 jEbNeAxo
短いのならここに直接貼ってもいいよ
長いのはコード貼るサイト使った方がいいと思
646:デフォルトの名無しさん
14/04/17 10:04:40.69 112XWAfL
ありがとうございます。技術が無いので無駄に長くなってしまっています。
647:デフォルトの名無しさん
14/04/17 10:12:07.35 jEbNeAxo
とりあえず、コード貼れるサイト
URLリンク(friendpaste.com)
選択肢にVBAがないからVB.netでも選んどいて
648:デフォルトの名無しさん
14/04/20 23:00:50.17 s+35q5Om
>>644
コードまだー?
俺も初心者だから他人の書いたコードを参考にしたいんだよー
649:デフォルトの名無しさん
14/04/21 07:31:38.50 4zlYEuTE
自己解決しました
どうも
650:デフォルトの名無しさん
14/04/23 20:07:42.26 xveRB+Bl
ExcelのA1~F1に任意で入れた数字を降順で並べたいんだけどよくわからん…
バブルソートさせるのはわかるが、表から数値を持ってくるにはどうしたらいいんですか?
651:デフォルトの名無しさん
14/04/23 20:44:27.34 ZM+hJQpr
>>650
a = Range("A1:F1")
652:デフォルトの名無しさん
14/04/24 00:53:35.48 m6J4LtNe
>>651
sub sort()
Dim a As Integer
Dim i As Integer
Dim j As Integer
Dim min As Integer
a = Range(A1:F1)
Do While j < a - 1
i = j + 1
Do While i < a
End Sub
よくわからん
653:デフォルトの名無しさん
14/04/24 01:40:46.12 nXU9pvpI
>>652
aは配列
Rangeは初心者にはおすすめしない
Dim a() As Integer
Dim i As Integer
For i = 1 To 6
a(i) = Cells(1, i)
Next
宿題は自分でやれ
654:デフォルトの名無しさん
14/04/24 18:08:41.31 NeL4TUu8
デフォルトプロパティ省略するのやめた方が良いぞ
655:デフォルトの名無しさん
14/04/24 18:30:46.52 ZALVHb/C
>>654
それはなぜですか?
656:デフォルトの名無しさん
14/04/24 19:43:11.79 nXU9pvpI
左辺がVariantじゃないから大丈夫
657:デフォルトの名無しさん
14/04/24 20:07:59.57 mnsZs1hI
今時学校でVBAを教えるところがあるのか
658:デフォルトの名無しさん
14/04/29 17:43:11.79 cd9z2Wuk
PDFで問題となっているものを、マクロを使って以下のように以下のようにできますでしょうか?
もし、可能ならばご教示ください。
1、PDF上の問題記号を選択すると解答選択肢が出てくる。(リストボックスのように)
2、その中から解答を選択できる。
3、最後に正答率、間違ったところの答え、間違ったところの根拠表示
659:sage
14/04/29 17:44:53.56 cd9z2Wuk
すいません。上げてしまいました。
660:デフォルトの名無しさん
14/04/29 17:55:04.83 KFswrGoL
すいません。
661:デフォルトの名無しさん
14/04/29 17:59:31.75 AVYTmVui
>>658
とりあえずPDFのサンプルをどっかにアップしてください
662:デフォルトの名無しさん
14/04/29 18:09:22.14 KFswrGoL
URLリンク(www.pref.kochi.lg.jp)の一番上にある教職・一般教養 [PDFファイル/1.93MB】です。
よろしくお願いします。
663:デフォルトの名無しさん
14/04/29 18:21:18.11 /qylVqTc
>>658
そのPDFの内容のうち、どこが問題記号でどこが解凍選択肢か、正解はどれか
そう言った情報が機械的に判断できる必要があるんだが、それは可能なのか?
664:デフォルトの名無しさん
14/04/29 18:25:24.29 8Pfgcz1/
>>658
URLリンク(pdf-file.nnn2.com)
ここでも嫁
665:デフォルトの名無しさん
14/04/29 18:35:52.24 hNJPTToz
>>663
そうですね。確かに正解と回答を参照することが頭から抜けていました。正解は正解のPDFを元に手打ちで、Excelに打ち込もうかと思うのですが、良い方法はありますでしょうか?
666:デフォルトの名無しさん
14/04/29 18:37:58.44 hNJPTToz
>>663
>>>658
>そのPDFの内容のうち、どこが問題記号でどこが解凍選択肢か、正解はどれか
>そう言った情報が機械的に判断できる必要があるんだが、それは可能なのか?
このすべてどうやればいいかわかりません。
667:デフォルトの名無しさん
14/04/29 20:11:16.39 7Qss/xhP
対象のPDFが最初の1本だけの場合、問題数は28、回答のパターンは5つかな?
この分量だと全自動化は非効率すぎる
コード書く手間を考えると手動でリストボックスを並べてった方が早い
全文をコピペしたあと、カッコの中に丸付き数字が入った部分を文字列検索してリストボックスに置き換え
これぐらいはVBAでできるな
選択肢は丸数字、スペース、単語、スペースの繰り返しになってる行を検索、それ以外のパータンは手動で設定
668:デフォルトの名無しさん
14/04/29 20:13:02.51 7Qss/xhP
よく見たら全部画像じゃねーか
まずはOCRからか
こんなもんVBAの質問の範疇じゃないわ
669:デフォルトの名無しさん
14/05/03 20:16:41.15 zpOcxqmE
何万回も計算とかするためにセルに入力されてる1000単位のデータを、いちいちシートから参照すると時間がかかりそうだから二次元配列に格納して取り扱ってるんですが、やっぱり計算に時間がかかるんで配列より早い方法ってないですか?
そもそもシートから参照したほうが早かったりしますかね。
670:デフォルトの名無しさん
14/05/03 20:20:45.14 6uPX0+EP
その前にシートに計算式がてんこ盛りなら再計算をストップしてからするとか
671:デフォルトの名無しさん
14/05/03 20:53:57.75 Ucenml3N
>>669
すくなくともセル参照よりは配列を参照する方が早いというのが通説
頻繁に参照する場合は配列に入れてアクセスするのは常套手段
時間かかってるのが参照ではなく計算そのものなら、参照早くしてもあんまり効果ないだろ
672:デフォルトの名無しさん
14/05/03 21:13:46.07 pGt2sRew
>>669
計算量が多くてスピードが重要ならVBAじゃなくてせめてVBを使え
673:デフォルトの名無しさん
14/05/03 21:20:32.55 BzVjbdP5
>>66
> そもそもシートから参照したほうが早かったりしますかね。
1000単位のデータの内使うのがひとつだけとかの特殊な状況でない限り、ぜ~~~っていあり得ない。
つーか、今配列使ってるならセル参照に変えてみなよ。
674:デフォルトの名無しさん
14/05/03 22:48:42.50 zpOcxqmE
どうも回答ありがとうございます。
配列のほうが早いみたいですね。
シートでの計算も一切してませんし、会社のPCなのでVBを導入することも難しいので
計算式を見直して速度を上げたいと思います。
675:デフォルトの名無しさん
14/05/03 23:04:23.60 pGt2sRew
まともなコンパイラも許可せずに、そんな大変な計算をさせるなんてどんなブラック企業だ
676:デフォルトの名無しさん
14/05/03 23:53:50.92 8kppz192
>>674
計算式を見直すんじゃなくて、処理を見直したほうがいいと思う
677:デフォルトの名無しさん
14/05/04 10:30:37.54 A7LETp9o
エクセルVBAのunicode文字列をdllに渡す処理のことで質問があるんだけど
このスレでOKですか?
678:デフォルトの名無しさん
14/05/04 10:46:31.65 PkGldEjn
構造体の変数が2つあるんですが
1つを他のもののコピーとしたいんですが
単に代入すると同一のものの参照となります。
そうじゃなくて構造体の全メンバの変数の値をコピーするにはどうするのが一般的ですか?
679:デフォルトの名無しさん
14/05/04 10:47:16.38 PkGldEjn
Structure Student
Dim name as String
Dim age as integer
Dim sex as String
Dim first_time_sex_date as Date
End Structure
Dim student(2) as Student
student(1).name="Taro"
student(1).age=16
student(1).sex="Male"
student(1).first_time_sex_date="2012/7/7"
student(2)=student(1)
student(2).name="Jiro"
みたいにすると変になる。
680:デフォルトの名無しさん
14/05/04 10:48:20.51 PkGldEjn
VBAでIEを操作するとき
タブ(複数開いてる)でアクティブになっているページをgetするためには
どういうコードになりますか?
681:デフォルトの名無しさん
14/05/04 10:49:41.57 PkGldEjn
あ、そういえばExcelで他シートをActivateしたらそのシートでActiveCellになるはずのセルのアドレスを
そのシートをActivateせずに取り出す方法を以前発見したのですが
それはどういう方法だったのでしょうか?
682:デフォルトの名無しさん
14/05/04 14:59:19.38 ifQjgP9H
>>678
構造体の全メンバをコピーする関数はないの?
クラスによくある、cloneとか
コピーには、Shallow Copy(浅いコピー)と、
Deep Copy(深いコピー)の2つがある
構造体の中に、構造体の参照があったらどうする?
クラスの中にクラスの参照とか、または相互に入っていたら?
さらに、2重、3重になっていたら?
深いコピーだと、参照なら本体を新しく作って、
本体もコピーするが、
浅いコピーだと、参照をコピーするだけなので、
本体は同じものを使ってしまう
683:デフォルトの名無しさん
14/05/04 15:10:16.41 PkGldEjn
>>682
すんません、なにも知らんです。
ExcelのVBAには全メンバコピーの方法ってないのですか?
cloneってなにかのクラスのメンバメソッド?
あれ、VBAはクラスって使えるの?
ところで他言語でクラスの勉強はじめたけど、よく考えたら構造体とクラスって似てるよな。
684:682
14/05/04 17:21:28.68 ifQjgP9H
VB.netには、Copy, Cloneがあるが、
VBAはV6仕様なので、無いかも?
クラスはある
クラスモジュールにクラスを定義して、new して使
なので、ここにCloneを自分で定義したら?
漏れもよく知らない
検索で調べただけだから、自分でも調べて
それと、複数のスレで同じことを聞く、
マルチポストは禁止なので、どちらかを取り消すこと
685:デフォルトの名無しさん
14/05/04 18:18:53.17 MnWuoZnQ
>>683
>ところで他言語でクラスの勉強はじめたけど、よく考えたら構造体とクラスって似てるよな。
ちょっと待て。VBAは普通構造体というとユーザー定義型のことを指すけど、
VB.NetやC#の構造体とごっちゃに考えていないか?
VB.Netとかの構造体でクラスと似ていると言うなら、
そりゃそうだろとしか言いようがない。と言うか、
どういう時にクラスを使ってどういう時に構造体を使うのかを調べれば
すぐに分かると思う。
686:デフォルトの名無しさん
14/05/06 22:58:33.18 moIIdFlD
かなり低レベルな内容だとは思いますが、判らないので教えてください。
日付をmm/dd/yy形式で出力してくるログをyyyy/mm/dd形式で取り込みたいのですが、
普通にformat(date,"yyyy/mm/dd")みたいにするとうまくできません。
(たとえば05/05/14は、2014/05/05とならず、2005/05/14となってしまいます)
とりあえず仕方なく前6桁と後ろ2桁で分離してくっつけなおすという格好悪い方法でやってますが、
もっとスマートなやり方があったら教えて欲しいです。
よろしくお願いします。
687:デフォルトの名無しさん
14/05/06 23:12:00.35 Avr/JzZk
低レベルとは
0100011011010101
みたいな話だ。
688:デフォルトの名無しさん
14/05/07 00:35:08.77 uh4oWvq+
>>686
前5桁じゃなくて6桁?
ログってことはテキストファイルだろうから、テキストファイルウィザードで日付→MDYを選択すればいい
URLリンク(imo73.eek.jp)
689:デフォルトの名無しさん
14/05/07 07:35:46.76 SH7lri32
>>688
即レスありがとうございます。
そうです5桁でした。
そして対象が行ごとに違う内容が入ってくるログなのと、
読み込んだ日付を基準に処理を分岐させたいのでその方法は使えないです。
690:デフォルトの名無しさん
14/05/07 08:31:27.71 FZZA6k3k
>>689
> とりあえず仕方なく前6桁と後ろ2桁で分離してくっつけなおすという格好悪い方法
で、やれてるんじゃねーのかよ。
まあ、条件後だしする奴にはなに言っても無駄か...
691:デフォルトの名無しさん
14/05/07 12:49:17.67 oO9n6rpk
次の行が読めなかったんだな。可哀想に。
692:デフォルトの名無しさん
14/05/07 13:43:37.48 rXgxEPuc
セールスマン問題にアニーリング法をうまく組み込めない…
693:デフォルトの名無しさん
14/05/07 14:17:10.39 uh4oWvq+
>>692
VBA無関係
データ構造,アルゴリズム,デザインパターン総合スレ 2
スレリンク(tech板)
694:デフォルトの名無しさん
14/05/07 14:52:43.45 eMxnpyoF
>>689
方法はあまり変わらんけど、こんなのも有るよ
moto = "05/07/14"
Debug.Print "moto= " & moto
moto20 = Left(moto, 6) & "20" & Right(moto, 2)
Debug.Print Format(moto20, "yyyy/mm/dd")
2099年までこの方法は使える、2007では識別出来たけど、他Verは判らない。
695:デフォルトの名無しさん
14/05/07 18:18:55.57 MZ01fZnX
ゴミ
696:デフォルトの名無しさん
14/05/07 22:57:09.28 VZywwylY
>>686
Splitで"/"で分割して、年の部分だけ頭に"20"でもくっつけて、
順番かえて"/"で結合するようなんじゃダメ?
697:デフォルトの名無しさん
14/05/08 00:00:54.73 UhAEWxzw
年が2000年代固定ってどうなのよ
ログで99年が2099年ってどこの未来から来た人ですか
698:デフォルトの名無しさん
14/05/08 00:46:43.35 E+ainyFV
それはシステムの特性によって切り分ければいい話だ
どのみち入力の年が2桁の時点で判断は必要になるわけで
699:デフォルトの名無しさん
14/05/08 01:06:45.17 8vH2dr8E
年数の二桁→四桁変換はOSの設定に任せとけば良い。
とか思ったけど、書式指定でDateに変換する方法が無い罠だった。
700:デフォルトの名無しさん
14/05/08 16:40:16.01 UhAEWxzw
スマートなやり方ってのがどんなのをご希望か知らんが
moto = "05/07/14"
Debug.Print "moto= " & moto
saki = DateSerial(Mid(moto, 7, 2), Mid(moto, 1, 2), Mid(moto, 4, 2))
Debug.Print Format(saki, "yyyy/mm/dd")
まあこんな感じか
701:デフォルトの名無しさん
14/05/08 18:22:31.60 uOW3clqT
どうやっても大差ない
moto = "05/07/14"
saki = DateValue(Right(moto, 2) & "/" & Left(moto, 5))
Debug.Print Format(saki, "yyyy/mm/dd")
702:デフォルトの名無しさん
14/05/09 10:23:43.29 QVvO9eKk
ノートン 問題 裁判
ノートン 問題 裁判
ノートン 問題 裁判
ノートン 問題 裁判
703:デフォルトの名無しさん
14/06/12 22:38:54.01 JGtl8L6J
日別の購入データの通し番号から、マスターを参照してジャンル分けして、ジャンルごとの合計金額を出したいです。
URLリンク(light.dotup.org)
↑
データはこのような画像の通りにシート3つに分かれて存在しています。
どのようなマクロを組めばいいかお教え願いたいです。
ジャンルごとに変数というものを持たないといけないのでしょうか?
実際は母が使うので、ボタン一つで出来るのだとありがたいのですが・・・
大変面倒な質問ですが、お願いします
具体的なコードを教えてください
本当に困っていますお願いします
704:デフォルトの名無しさん
14/06/12 22:54:39.12 LMWZ0+/Q
>>703
ピボットテーブル使うってのは?
答えに全くなってないわけだが、、、、
705:デフォルトの名無しさん
14/06/12 22:55:17.66 JGtl8L6J
>>704
ボタンひとつで計算してくれるようにしたいんですが
そのコードを教えてください
706:デフォルトの名無しさん
14/06/13 00:07:26.49 3uExzG0V
凄まじいマルチw
707:デフォルトの名無しさん
14/06/13 10:30:47.32 jJMpWNsU
>>705
コード作ってもいいが保守するのが大変。
まずは標準の機能でできないものかトライするよろし。
708:デフォルトの名無しさん
14/06/14 15:16:41.92 UnUM1hDE
こんにちは。セルの不一致部分を取り出して、1から並べ直し、
修正したデータを入力するというマクロを作成しているのですが、
同じ列で複数の間違いがあった場合、iを進めないように、コメントアウトしているif文を入れたのですが、
そうすると、2行目で 実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです
が表示されてしまいます。
列に間違いは2つ以上ないということで、コメントアウト部分を削除したままなら問題なく稼働するのですが、
この1文を入れるとどうしても進みません。
Arrayには、不一致部分のセルの座標が入っています。
全然ここから進まなくて困っていますので、どうかご教授お願い致します。
Do
ws.Cells(Array_l(j), Array_r(j)).Value = s1.Cells(i + 1, Array_r(j)).Value
'B1の数値を修正する
ws.Cells(Array_l(j), Array_r(j)).Interior.Color = xlNone
'B1のセル背景を元に戻す
ws2.Cells(Array_l(j), Array_r(j)).Interior.Color = xlNone
'B2のセル背景を元に戻す
'If Array_l(j) = Array_l(j + 1) Then
i = i - 1
'End If
j = j + 1
i = i + 1
If Array_l(i) = Empty Then Exit Do
Loop
709:デフォルトの名無しさん
14/06/14 15:23:57.74 UnUM1hDE
コメントアウトしている部分は
i=i-1
の部分です 'つけ忘れです、すみません。
710:デフォルトの名無しさん
14/06/14 16:30:49.01 Je/qq0DA
>>708
省略してる部分が多すぎて何がやりたいかわからん
ステップ実行するかなんかでロジック追ってみたら
昔ならこれフロー書いてみろとか言われるんだろうな
しかし、変数名って大事だなと思うわ
711:デフォルトの名無しさん
14/06/14 17:00:57.85 UnUM1hDE
>>710
返信ありがとうございます
iを調節するIF文を入れるとなぜか
s1.Cells(i + 1, Array_r(j)).Value にエラーが出るんです。
s1.Cells( 2 , 4 ).Value
という風に変えてもエラーが出るんです。
IF文を消せば消えるんですが。
712:デフォルトの名無しさん
14/06/14 17:23:19.85 UnUM1hDE
事故解決できました!ありがとうございました!
713:デフォルトの名無しさん
14/06/14 22:49:14.29 jhtRx4NU
KING SOFTのVBAは完全互換ですか?
714:デフォルトの名無しさん
14/06/15 06:28:01.21 sZLgElUH
>>713
何と?
715:デフォルトの名無しさん
14/06/15 15:24:53.85 +yTvRbGG
まったく同じプログラムなのに保存したらファイルサイズが違った
これでは完全互換とは言えない
716:デフォルトの名無しさん
14/06/17 03:20:53.05 HVt3rccc
>>715
エクセルでブックを別PCにコピーして開き、
何もせずにそのまま保存してもファイルサイズが変わることがある