●EXCEL・VBA質問スレ Part2●at TECH
●EXCEL・VBA質問スレ Part2● - 暇つぶし2ch390:デフォルトの名無しさん
07/07/13 22:24:26
俺はソフトで差分バックアップしてる
重要なデータExcelだけじゃないし楽だし早い

391:デフォルトの名無しさん
07/07/13 23:27:17
>>381さん
>>386さん

>378です。

ご教授頂き有難うございます。
>>386さんのを使用して出させて頂きました。

有難うございました!


392:デフォルトの名無しさん
07/07/14 09:54:31
>>390
外部からだと作業の途中経過のバックアップは取れないからな
問題が起きたときに前回保存時まで戻されるのは勘弁してほしいってデータは
外部の汎用バックアップソフトではなく、内部のマクロで途中経過のバックアップを取った方がいい

393:デフォルトの名無しさん
07/07/14 12:56:32
バックアップとは言え、マクロ動かしっぱなしにしてたらメモリ食わない?

394:デフォルトの名無しさん
07/07/14 13:32:56
>>392
俺の使ってるソフト、圧縮機能はない
URLリンク(www.forest.impress.co.jp)
開いているファイルでもバックアップできるし作業途中で保存していればその分更新される
Officeのように自動保存機能があるソフトならより万全
途中経過が保存される前にPC固まったら駄目だけど、そのマクロも同じだろ?

395:デフォルトの名無しさん
07/07/14 18:04:44
>>393
当然食うよ
搭載メモリ量の10000分の1以下だから気にならないけどね


>>394
マクロの場合
> 作業途中で保存していれば
なんて条件は付かない
保存もマクロでやるからね
Officeの自動保存機能はバグあるし

396:デフォルトの名無しさん
07/07/15 10:15:02
VBA画面だとスクロールボタンが使えなくて不便だな。
ぐぐったら「Intelipoint 4.1を入れると直る」と出てきたけど、
うちのMicrosoftマウスはこのバージョンに対応してないしな。

397:デフォルトの名無しさん
07/07/16 12:01:06
Excel2000のVBAプログラミングでウィザード形式のユーザーフォームって
つくれますか? StarSuiteのBasicにはその仕様があるのですが、
VBAに関してはググってもなかなか直に解説してあるページがみつからなくて。

現在、同じサイズのユーザーフォームをいくつか用意してそれを順番に表示させる
ことで「ウィザードもどき」にしているんですが・・・・

398:デフォルトの名無しさん
07/07/16 20:33:23
>>397
コンテナになるコントロール使えば良いだけの話
これで解らなければあとはVBAではなくVBの分野なので
そっちの方向で勉強してね

399:デフォルトの名無しさん
07/07/17 00:11:19
>>398
どうも有難うございます。調べてみます。

400:デフォルトの名無しさん
07/07/17 10:11:14
学校の課題で、セルA1~A10 にそれぞれ10,20,30……100と表示し、その和をB1に表示するプログラムを作成せよ。
という課題が出て、試行錯誤してたのですが、詰まってしまいました。
ヒントとして、↓が出ていて、その通りにやったつもりなのですが、セルA1~A10にはゼロしか出てこなくてorz

1.次元数10の配列を宣言し、Forループを利用して数値(10~100)を作成する。
2.Forループを利用して和を計算する
3.Forループを利用して数値(10~100)を表示する。
4.和を表示する。

↓がいま現在のプログラムです。

Sub 課題1()
Const N = 10
Dim A(N)

For T = 1 To 10
A(N) = A(T) * 10
Next T

S = 0
For j = 1 To N
S = S + A(j)
Next j

For C = 1 To 10
Cells(C, 1) = A(N)
Next

End Sub

どなたかご教授願います。

401:A(T) * 10じゃなくてT * 10
07/07/17 10:40:03
>>400
それのどこがVBAの質問なのかと。basicの基本以下のレベルジャマイカ。

402:デフォルトの名無しさん
07/07/17 11:21:45
>>400
debug.printから出直せ。その方が君の為だ。

403:>>401 それを指摘するならA(T) = T * 10だな
07/07/17 11:27:02
>>400
ループ制御変数と個数の定数が混在しているぞ。

404:デフォルトの名無しさん
07/07/17 14:52:21
最近の学校の課題はエクセルVBAをやらせるのか…。
>セルA1~A10にはゼロしか出てこなくてorz
 ↑当たり前だ。403の名前欄を参照。
>Cells(C, 1) = A(N)
 ↑全部のセルに同じ値が出るに決まってるだろ。

まさかプログラマを目指してるとか言わないよな?

405:400
07/07/17 18:14:05
400です。皆さんのレスを参考に17:00から試行錯誤し直してやっと完成したので報告します。
下のプログラムで表示させることができました。本当、ありがとうございました。

Sub 課題1()
Const N = 10
Dim A(N)

For T = 1 To 10
A(T) = T * 10
Next T

S = 0

For j = 1 To N
S = S + A(j)
Cells(j, 1) = A(j)
Next j

S = 0
For c = 1 To N
S = S + A(c)
Cells(1, 2) = S
Next c

End Sub

406:デフォルトの名無しさん
07/07/17 18:19:26
Dim a(10)
For i = 1 To 10
a(i - 1) = i * 10
Next
s = a(0)
For i = 2 To 10
s = a(i - 1) + s
Next
For i = 1 To 10
Range("A" & CStr(i)) = a(i - 1)
Next
Range("B1").Value = s



407:デフォルトの名無しさん
07/07/18 09:54:41
>>405
どう見てもこの後ループを纏めることになるので、先回りしておけ。

408:デフォルトの名無しさん
07/07/18 13:21:11
開いていないファイルのセルデータをVBAで直接取得する方法ってありますか?

現状はセルに式を入力してから変数に代入、セルを削除
または該当ファイルを開いて取得、ファイルを閉じるみたいな感じです

409:デフォルトの名無しさん
07/07/18 13:27:58
バイナリ解析して直接描くならひらかずにどうぞ


410:デフォルトの名無しさん
07/07/18 13:44:57
>>408
そのファイルがCSVならそれほど難しくないでしょう。

411:408
07/07/18 14:12:48
>>409
難しくて私には分かりません

>>410
ファイルはCSVではなくEXCELブック形式です

ファイルを開けば
A = Workbooks(ファイル名).Sheets(シート名).Range(範囲)
で取得できるのでどこかを少し弄ればどうにかなるのかなと思ったんですけど・・・


412:デフォルトの名無しさん
07/07/18 14:21:39
内部的に開いていいなら(表示はしない)簡単だけど、全く開かずとなると無理っす
バイナリ解析するにも先ずはファイルをOpenしないと始まらないし

413:デフォルトの名無しさん
07/07/18 16:03:15
>>412
どうやら無理そうですね

開かずに済むセルに入力して・・・ の方法で処理しようと思います
ありがとうございました

414:デフォルトの名無しさん
07/07/18 18:48:05
>>408
VBAじゃないけど参照で良ければ。
='c:\Documents and Settings\hoge\My Documents\[book1.xls]Sheet1'!a1
とか

415:デフォルトの名無しさん
07/07/18 20:21:15
>>413
VBA以前のExcel4マクロ(だっけ)なら簡単にできるはず。
Excelの関数と同じくVBAから使用することも可能
ヘルプは英語版ならMSから無料で落とせる。

416:デフォルトの名無しさん
07/07/18 20:29:52
とりあえずサンプル見つけたので>Excel4マクロ

Cells(1, 1) = Application.ExecuteExcel4Macro("'C:\My Documents\[Book2.xls]Sheet1'!R1C1")

URLリンク(oshiete1.goo.ne.jp)

417:デフォルトの名無しさん
07/07/18 21:21:50
そのExecuteExcel4Macro使う方法が>>412も言ってる
> 内部的に開いていいなら(表示はしない)簡単だけど
の方法でしょ。でも、これだって開いてないわけではないので、この方法では嫌なんだとさ。
内部的に開いて良いなら他にもいくつか方法はあるんだけどね。

因みにExecuteExcel4Macroを使ってセルの値を取得する方法は
かなり有名で解説サイトはいっぱいあるから英語版ヘルプなんて必要無いが
空セルを取得すると空文字やEmpty値ではなく0が返ってくるという不都合がある。
つまり、数値の0が入ってるセルと何も入ってないセルを区別出来ない。

418:デフォルトの名無しさん
07/07/18 22:05:36
皆さん、MSOfficeのスキル高そうですけど、関係する資格などはお持ちですか?

私の勤める会社は、持っている資格を全て棚卸して一覧にまとめよ、なんて御触れが出ました。

ひけらかしたい奴は全部書くし、変なプロジェクトに引っ張られたくない人は応分に隠し、
こんなに資格もってんならウチにいなくてもなんとかなるだろう、とリストラの対象になりたくない人は適当に描いていました。

スキルを保有するのはいいが、ヘタに見せると悪影響があるなんて、初めて知った2007年の夏でした。

419:デフォルトの名無しさん
07/07/18 22:11:08
>>417
> この方法では嫌なんだとさ。

たぶん内部的に開くの意味よくわかってないだけだと思うが

>または該当ファイルを開いて取得、ファイルを閉じるみたいな感じです
これが嫌なんだろう

420:デフォルトの名無しさん
07/07/19 00:00:30
VBAで配列の宣言時に初期化ってできないのですか?
下のようにできると聞いたのですが、実際やってみると「=」が駄目なのか
コンパイルエラーになってしまいます。

Dim Moji() As String = {"ABC", "DEF", "GHI"}

421:デフォルトの名無しさん
07/07/19 00:37:15
VBならできるけどVBAは駄目です

422:デフォルトの名無しさん
07/07/19 11:03:09
そんなことはない

423:デフォルトの名無しさん
07/07/19 11:06:18
正確にはVBの2002以降ね
VBでもVB6では出来ないし、当然VB6準拠のVBAでも出来ない

VB6で出来ることはコントロールと特殊なオブジェクト絡み以外ほとんどVBAでも出来るから問題ないが
VB2002で大きく変わったので、VB2002以降用の解説読んでそれをVB6やVBAでやろうとして
出来なくて混乱しちゃう奴って結構居るみたいだね

424:デフォルトの名無しさん
07/07/19 11:13:42
Dim Moji() As Array("ABC", "DEF", "GHI")

425:デフォルトの名無しさん[
07/07/19 21:44:55
VB6でもArray使えば、配列の初期化できるのか。でも、多次元は無理なのかな

426:デフォルトの名無しさん
07/07/19 22:25:34
VBAでSub プロシージャでは値渡しも参照渡しもできるのですが
Func プロシージャでは値渡ししかできません。参照渡しのやり方ってどうやるのでしょうか。

427:デフォルトの名無しさん
07/07/19 23:29:02
ByVal?

428:デフォルトの名無しさん
07/07/19 23:29:40
ごめんちがた

429:デフォルトの名無しさん
07/07/20 00:00:33
>>426
普通にできるだろ

430:426
07/07/20 00:25:26
↓こんな感じの作ってやってみたけど、表示されるのは"A"
ちなみにFunction→Subに変えたらちゃんと"B"が表示されます。
使い方がまずいのでしょうか?

Sub test()
Dim tmp As String
tmp = "A"
func1 (tmp)
MsgBox tmp
End Sub

Function func1(ByRef tmp As String)
tmp = "B"
End Function


431:デフォルトの名無しさん
07/07/20 00:31:45
Sub test()
Dim tmp As String
tmp = "A"
c=func1(tmp)
MsgBox tmp
End Sub

Function func1(ByRef tmp As String)
tmp = "B"
End Function




432:426
07/07/20 00:45:38
>431氏の通りにしたらできました。
式にしないと駄目ということなんですかね。


433:デフォルトの名無しさん
07/07/20 00:46:22
func1 tmp

434:429
07/07/20 00:47:32
>>430

  136 デフォルトの名無しさん  mail:sage  2007/02/02(金) 00:10:24

> VBAは自分で作った関数を使う際、
> 引数にかっこをつけてはいかんのです。
ハズレ

自作関数の場合ではなく、基本的にSub、Functionプロシージャ(メソッド)を呼ぶ場合、
戻り値を取る場合とCallで呼ぶ場合以外は()を付けない。MsgBox関数の場合だとこんな感じで使う。
[1] MsgBox "test", vbOkOnly
[2] Call MsgBox("test", vbOkOnly)
[3] ret = MsgBox("test", vbOKCancel)

自作関数の場合でも戻り値を取る場合とCallで呼ぶ場合は()付けなきゃダメだし
自作関数じゃなくても、[1]のように使うときは()付けてはいかんのです。
ややこしいのは、引数一つの関数の場合。
[4] Inc hoge
[5] Inc (hoge)
Sub Inc(Value As Long)
  Value = Value + 1
End Sub
[4]の方だと変数hogeが+1され、[5]の方だと変化しない。
引数一つの関数をCallを省略し引数に()を付けて呼ぶと、引数は値渡しになる。
基本的に参照渡し値渡しは呼び出される側で指定するので、[5]は殆ど使われない。
意味も知らずに間違って使ってる奴は居そうだけどな。。

435:デフォルトの名無しさん
07/07/20 01:12:19
回答ありがとうございます。
VB独特の仕様なんで覚えるしかないみたいですね。
また間違えそう・・・



436:デフォルトの名無しさん
07/07/20 01:20:28
func(tmp)
func (tmp)
とは違うだろ
下はc=func((tmp))
のようなもの
上のような書き方は存在しない

437:デフォルトの名無しさん
07/07/20 02:51:18
>>430
引数に何もしなければ参照渡し
()でくくると値渡し

Sub test()
Dim tmp As String
tmp = "A"
func1 tmp
MsgBox tmp
End Sub

Function func1(tmp As String)
tmp = "B"
End Function

438:デフォルトの名無しさん
07/07/20 06:55:09
つまり、外せる括弧は外せと言うことだな。

439:デフォルトの名無しさん
07/07/20 17:44:58
func1 -tmp
としたら誰もtmpで値が受け取れるとは思わないだろ
同じことだよ

440:デフォルトの名無しさん
07/07/21 18:13:02
つまり、外せる演算子は外せと言うことだな。

441:デフォルトの名無しさん
07/07/22 01:49:28
エクセルの処理を一瞬だけ止める命令ってどんなのがありますか?
調べたところ、waitを使って、現在時間を調べてそこから1秒待ちをする、などは分ったのですが、
私がやりたいのは、コンマ1秒だけ処理を止めるというものをやりたいんです。

ですが、いまいちコンマ何秒だけ処理を一時停止させるという方法が分かりません。
初歩的な質問で申し訳ないのですが、教えていただけないでしょうか。

442:デフォルトの名無しさん
07/07/22 02:44:42
>>441
Win32APIのSleep使えばいいだけだよ
㍉秒指定なので、コンマ1秒なら100㍉秒指定で

443:441
07/07/22 07:24:57
解決しました。ありがとうございます。

444:デフォルトの名無しさん
07/07/22 12:21:00
444

445:初心者☆
07/07/22 16:04:23
DataAdd関数のところで
「コンパイルエラー:
SubまたはFunctionが定義されておりません」
と出るのですが、なぜエラーになるのかがわかりません。
わかる方おしえてください。
ちなみに、
DataAdd("d", data_length, Now)
みたいなカンジで使ってます。

446:デフォルトの名無しさん
07/07/22 16:50:00
そんな関数あるのか?

447:デフォルトの名無しさん
07/07/22 16:56:25
>>445
クリティカルで答えを言ってやる。おまいさんが参考している本が分かった

DataAdd ×
DateAdd ○

こういうこった

448:デフォルトの名無しさん
07/07/22 17:10:15
教えて下さい。

10品目 月の入荷から各個人に日々の払い出しを行い。
入荷数から払い出しを引いた在庫数がわかるようなマクロはどうすればいいでしょうか?
シートを分けたいです。

449:デフォルトの名無しさん
07/07/22 19:24:12
エスパーじゃない普通の人間に判るように書け。

450:デフォルトの名無しさん
07/07/23 14:55:39
VLOOKUPで検索して参照している値を変更したいのですが
どうやったらいいのでしょう?

-------------
1  AAA
2  BBB
3  CCC
4  DDD
-------------

3  CCC

3って入力すると右にCCCって出てくる
そのCCCをXXXって変えると元のデータのが

1  AAA
2  BBB
3  XXX
4  DDD

ってなるようにしたいです。VBA使わないと出来ないですかね?
なるべくExcel関数だけで作りたいのですが・・・

451:デフォルトの名無しさん
07/07/23 19:12:45
>>450
ここはVBAでやりたい人の為のスレだよ
まあExcelの本スレにも書かれている通り、関数では値の書き換えは出来ないので
どっちにしろVBAでやるしかないけどね

452:デフォルトの名無しさん
07/07/23 20:51:08
このスレ初めて見つけたときエクセルとVBAの質問スレだと思った。
スレタイいじったほうがいいんじゃないスかね

453:デフォルトの名無しさん
07/07/23 20:58:14
板見りゃわかるっちゃわかるけど、スレタイだけ見るとそうだね。

454:デフォルトの名無しさん
07/07/23 21:53:41
まあExcelでプログラム技術系の話と言ったらVBAしか無いもんな

455:デフォルトの名無しさん[
07/07/23 22:05:50
バイナリファイルを作るマクロ作成したんですが
常に新規作成で作ることできますか?
Open "ファイル名" For Binary As #1
↑こんな感じで最初やってみたんですが、新規ファイルがある場合でも
単純に頭から上書きするみたいで困っています。


456:デフォルトの名無しさん
07/07/23 22:49:33
kill

457:デフォルトの名無しさん
07/07/23 23:12:51
>>454
いやいやExcelとプログラムを絡めるだけなら、
オートメーションで他言語から操作するなんてこともあるぞ。

まあその言語特有の事情を除けば、VBAでやるのと何も変わらないが。

458:デフォルトの名無しさん
07/07/23 23:36:53
UserFormのUserForm_Initializeで変数と画面の
初期化をしていますが、ここのロジックを通ってUseeFormが
表示されたあと、画面をUnload Meしてブックを保存して閉じると、次回起動時に

「問題が発生したため、Microsoft Office Excelを終了します。
ご不便をおかけして申し訳ありません。」
と出て、強制終了してしまいます。

ただし、次の場合はエラーが出ずに起動できます。
・保存せずに閉じた場合。
・マクロを無効にして起動し、保存した場合(orしない場合)
・VBEを表示させて実行した場合。

デバッグしたらエラーにならず実行されるので、原因がつかめず困っています。

いろいろ手探りでやってみたところ、2回目の起動の時、
UseeFormにあるコントロールにアクセスすると落ちてしまうようです。
例えば、、
 UserForm.lb_KUBUN.Caption = "" とか、
 cb_Save.Enabled = True といった感じです。

UseeFormには200近いラベルがあります。
あとは22のフレームと、14のコマンドボタン、リストボックスとコンボボックスが1つずつで、
テキストボックスはありません。ブックの大きさは1Mくらいです。
Office Updateは最新状態にしてます。

最初は起動できるので、実行後の保存の時になんか悪いもんが残ったりしてるのかなぁという感じです。

みなさま、お心当たりあればどうぞご教示ください。

459:デフォルトの名無しさん
07/07/23 23:53:34
そのフォームをいい時と悪いときでエクスポートして比べてみたらいいんじゃ

460:458
07/07/24 00:24:55
エクスポートして比べてみたけど、同じでした。。

461:デフォルトの名無しさん
07/07/24 07:16:30
最小限の再現出来るソースを出せ

462:デフォルトの名無しさん
07/07/25 23:45:28
検索をするプログラムをもっと簡潔にしたいのですが。
いま2次元配列NK_ryuu(1 To 50, 1 To 15)で
NK_ryuu(x.1)にID
NK_ryuu(x.2)に項目A
NK_ryuu(x.3)に項目B
NK_ryuu(x.4)に項目C
と入っていてxは1から50まであります。
ここであるシートの中から項目ABC全部を持っている行を抜き出すのですが、
今は下のようになっていてforとifを2重3重に使っていてちょっと見た目が汚いです。
しかも項目やxが増えた場合に処理がものすごい勢いで重くなりそうです。
もうちょっと賢いやり方ありませんでしょうか?お願いします。
配列honban()に取得した行番号を格納しています。



463:462続き
07/07/25 23:46:08
Sub test()
With ActiveSheet
For x = 1 To 50
For i = 1 To 500
If .Cells(i, 2).Value = NK_ryuu(x, 2) Then
If .Cells(i, 3).Value = NK_ryuu(x, 3) Then
If .Cells(i, 4).Value = NK_ryuu(x, 4) Then
honban(j) = i
End If
End If
End If
Next i
Next x
End With
End Sub

464:デフォルトの名無しさん
07/07/26 08:24:32
すいません、質問をさせてください。
VBAではなく普通の関数なんですが、
3人の1ヶ月の勤務表があるとします。
   A   B   C   D   E
1     Yさん Mさん Aさん 
2  1日   0   2   休 
3  2日   0   休   休 
:  :
31 30日   休   0   1 
とした時、(勤務表の数字は出勤時間を意味しており、0が朝、1が昼、2が夕方から出勤)
E列にその日の出勤が1人の場合のみ名前を出力するようにしたい場合、
現在は=IF(COUNT(B2:D2)=1,INDEX($B$1:$D$1,1,MATCH(0,B2:D2,0)),"")
と入力しておりますが、
これを一つの関数で行うことはできるのでしょうか?
VLookupの場合テーブルでないとエラーがでるので、
あれば教えていただけないでしょうか。

よろしくお願い致します。

465:464
07/07/26 08:31:02
追記です。
出勤する人が1人の場合は、
必ず勤務は朝からになります。(勤務表には0が入ります。)


466:デフォルトの名無しさん
07/07/26 12:16:14
>>465
>464では何故いけないの?
つーか、「1や2が存在しない」ことと「0の人の名前を得る」ことの
両方を同時に満足するような関数なんてあるわけないじゃん。

467:デフォルトの名無しさん
07/07/27 01:13:41
VBAはいつまで存続するんでしょ

468:デフォルトの名無しさん
07/07/27 01:39:11
>>467
キミが痴呆になるまで

469:デフォルトの名無しさん
07/07/28 10:08:25
エクセルで、
テキストファイルの印刷
を実行する方法を
教えてくれませんか?
pdfと同じようにシェルでやろうとしたらダメでしたorz

470:デフォルトの名無しさん
07/07/28 19:38:44
Private Sub CommandButton1_Click()
For i = 1 To 48
If Cells(1, 1) = Cells(i, 4) Then Cells(1, 2) = Cells(i, 5)
If Cells(3, 1) = Cells(i, 4) Then Cells(3, 2) = Cells(i, 5)
If Cells(5, 1) = Cells(i, 4) Then Cells(5, 2) = Cells(i, 5)
If Cells(7, 1) = Cells(i, 4) Then Cells(7, 2) = Cells(i, 5)
If Cells(9, 1) = Cells(i, 4) Then Cells(9, 2) = Cells(i, 5)
If Cells(11, 1) = Cells(i, 4) Then Cells(11, 2) = Cells(i, 5)
If Cells(13, 1) = Cells(i, 4) Then Cells(13, 2) = Cells(i, 5)
If Cells(15, 1) = Cells(i, 4) Then Cells(15, 2) = Cells(i, 5)
If Cells(17, 1) = Cells(i, 4) Then Cells(17, 2) = Cells(i, 5)
If Cells(19, 1) = Cells(i, 4) Then Cells(19, 2) = Cells(i, 5)
If Cells(21, 1) = Cells(i, 4) Then Cells(21, 2) = Cells(i, 5)
If Cells(23, 1) = Cells(i, 4) Then Cells(23, 2) = Cells(i, 5)

Next
End Sub


セルの値があらかじめ用意しているリストのと一致すると、
特定の文字を入力しようと こういうのを作りました
で、うまくいったのですが、
これだとそれぞれ1つのセルにしか記入できません。
たとえば1列目で、Cells(1, 3)にも何か書きたい場合はどうしたらよいでしょうか?
質問の意味が分かりづらかったらスマソ

471:デフォルトの名無しさん
07/07/28 19:48:59
For i=1 To 48
For m=1 To 12
j=2*m-1
If Cells(j,1)=Cells(i,4) Then Cells(j,2)=Cells(i,5):Cells(j,3)="何か"
Next
Next

472:デフォルトの名無しさん
07/07/28 19:53:23
>>471
速攻レスありがとうございます。
今仕事中でこっそり送信してるんで、時間ができたらやってみたいと思います。


473:デフォルトの名無しさん
07/07/28 20:18:42
記法とかオブジェクトの基本的な質問がちょくちょく出てくるのを見るに
VBAからプログラミングに入った人はある程度理解出来てきたなと思う頃
初心に返ってヘルプを一通り眺めてみるのが良さそうだね。

ランゲージリファレンスのメソッド・キーワードあたりの意味が一通りわかった時とか、
ウォッチウィンドウの使い方を理解した時涙出そうになったのを思い出した。

チラ裏スマソ。

474:デフォルトの名無しさん
07/07/28 20:25:55
>>471

For m = 1 To 12
j = 2 * m - 1



For j = 1 To 23 Step 2


475:デフォルトの名無しさん
07/07/28 21:10:24
470ですが
>>471 >>474氏 サンクス
今やって見たら解決しました。
:(コロン)を使うというのを初めて知りました。

特に仕事でVBAが必要というわけではないので、1年に一回くらいしか使わないのですが
たまに使うと初歩的なことも忘れてしまいます。

ちなみに競馬のデータ分析に使いましたw
1万レース近くあるのでVBAというかマクロというか分からんけど役に立ちます。

476:デフォルトの名無しさん
07/07/29 00:26:53
>>473
割と共感した

477:デフォルトの名無しさん
07/07/29 23:01:37 0
0~11までの数字をランダムに、かつかぶらないように代入したいんですが
以下のコードだと数字が代入されない場合があるんです。何が原因なんでしょう・・
__________________
n1k = Int(Rnd * 12)
Do
n2 = Int(Rnd * 12)
Select Case n2
Case n1k
Case Else
n2k = n2
End Select
Loop Until n2k = n2
Do
n3 = Int(Rnd * 12)
Select Case n3
Case n1k
Case n2k
Case Else
n3k = n3
End Select
Loop Until n3k = n3

478:デフォルトの名無しさん
07/07/29 23:09:29 0
書ききれないので・・実際はn8kまであります。

479:デフォルトの名無しさん
07/07/29 23:29:12 0
Empty = 0がTrueになるから。
その冗長的なコーディングにはやむを得ない事情があるの?

あと抜粋でもせめて宣言部は書こうよ。

480:デフォルトの名無しさん
07/07/29 23:37:30 0
n*kが数値型変数やVariant型変数の場合
Int(Rnd * 12)の結果が0ならCase Elseでの代入を行わなくても「n*k = n*」がTrueになるからでは?

そういうのは配列に順に数値を代入してからランダムソートするといいよ
というか、そうするのが普通だろ

481:デフォルトの名無しさん
07/07/29 23:51:51 0
{0,1,2,3,4,5,6,7,8,9,10,11}
{0,1,2,3,4,5,7,8,9,10,11}
{0,2,3,4,5,7,8,9,10,11}
{0,2,3,4,5,7,8,9,11}
こういうイメージで配列を操作せよ

482:デフォルトの名無しさん
07/07/29 23:51:52 0
>>480

>>477に便乗で悪いんだけど、

0~11までの数字をランダムに、かつかぶらないように代入したい

て時に俺は

Dim RndNum As Long
Dim NumCnt As Integer
'抜き出す数字の個数
NumCnt = 3
Set Dic = CreateObject("Scripting.Dictionary")
RndNum = Int(Rnd * 12)
Dic.Add RndNum, RndNum

Do While Dic.Count < NumCnt
RndNum = Int(Rnd * 12)
If Not Dic.Exists(RndNum) Then
Dic.Add RndNum, RndNum
End If
Loop

みたいなやりかたするんだけどダメ?

483:デフォルトの名無しさん
07/07/30 00:40:48
ダメではないけどDictionaryなんて使う必要ない

484:482
07/07/30 01:43:37
>>483
そか。
ちとランダムソートについて調べてみるよ

レスさんくす


485:デフォルトの名無しさん
07/07/30 02:31:58
全然詳しくないので質問させてください。
いつも仕事中にWebばかり見てる派遣クンが
「VBAがプログラムどおりに動かない原因を調べるのは僕の仕事ではありません。」
と言っています。
彼のVBAプログラムが動かないのを調べるのは誰の仕事でしょうか?


486:デフォルトの名無しさん
07/07/30 02:39:18
プログラムが失敗作と確定してるのだったら
そういうやつは辞めてもらえ

487:デフォルトの名無しさん
07/07/30 03:17:02
>>485
契約内容に因る
派遣ではなく業務請負なら間違いなくそれも彼の仕事のうちだけどね

一般的にはその派遣クンが悪いように見る人が多いかも知れないけど
契約内容によっては正しいことを言ってるかも知れない
それとこの質問において「Webばかり見てる」なんて情報は全く持って不要
彼の印象をなるべく悪くしようとしているようで浅ましい限りだ

488:デフォルトの名無しさん
07/07/30 10:34:02
vba おすすめ参考書は?


489:デフォルトの名無しさん
07/07/30 19:54:34
参考書とは言えないかもしれんが 「Excel VBA 実用サンプルコレクション」
異常にオブジェクト偏重なサンプル集だけどこの考え方は持っておくべきだと思う。
完全な入門ならちょっと敷居が高すぎるだろうけどね。

>>485って日本語の問題?動く物を作れで終了なんじゃw

490:デフォルトの名無しさん
07/07/30 19:59:21
セル範囲を画像化して保存する方法はありますでしょうか?

491:デフォルトの名無しさん
07/07/30 20:29:53
あるよ

492:デフォルトの名無しさん
07/07/30 22:57:49
素人な聞き方でスマソ
たとえば、
セルD1に「=A1&B1&C1」と入力したら「あいう」と表示されるとします。
(A1, B1, C1 にそれぞれ、あ、い、う が入っている)
セルD1 をセルD2に、paste spacial → values(*英語エクセルです)で
コピペしたら、セルD2には「あいう」というテキストが入ります。
このpaste spacial → values の作業を省略できるような関数があったら教えてください。
例えば、A1の値を「わ」に変えるだけで、自動的に 「わいう」というテキストの入ったセルを
ゲットできるようにしたいのです。

493:デフォルトの名無しさん
07/07/30 23:07:07
質問させてください。

UserForm上にComboBoxを配置して
Initializeで初期値とRowsourseによってリストを与えるようにしています。

ComboBoxのリストを開くと最初は一番上のリストの値から順に表示され、
一度リストから値を選択してComboBoxに入れ、
再度リストを開くとその値があらかじめ選択されており、
その値の前後が表示されるようになってます。
( 1 ~12月がリストにあり、5月を選び再度リストを開くと 5月が選択された状態で
リストをスクロールせずとも 3~ 7月の値が選択可能な範囲にある
 ような状態です。)

最初からComboBoxの初期値の付近のリストを表示させるようにしたいのですが、
方法はありますでしょうか?

説明が不十分で分かりにくいかと思いますが、宜しくお願いします。


494:492
07/07/30 23:19:05
自己解決しそうです。
PASTE.SPECIAL 関数っていうのがあるみたいですね。
でも手元にある 2003 のエクセルにはないみたいですが・・・
調べてみます。

495:492
07/07/30 23:27:31
やっぱり分からなかった。
たぶんマクロでやるんですかね。素人レベルには難しいことならば諦めます。

496:デフォルトの名無しさん
07/07/30 23:28:20
Private Sub UserForm_Initialize()
ComboBox1.Value = "5月"
End Sub


497:デフォルトの名無しさん
07/07/30 23:30:30
>>496
ただ単にValueで値を持たせてもできないのですが・・

498:デフォルトの名無しさん
07/07/30 23:31:24
>>492
d2に=d1じゃだめなん?

499:デフォルトの名無しさん
07/07/30 23:34:48
>>497
五月になってない?

500:デフォルトの名無しさん
07/07/30 23:43:09
>>499
正確には1~12の値のみで初期値に5を入れて
ComboBoxの値は5になっている状態でリストを見ても
1(リストの一番上の値)から5くらいまでが表示された状態になってます。

要は値は入っていてもリスト上は何も選択されていない状態です

501:デフォルトの名無しさん
07/07/30 23:45:30
>>500
それは値は入っていても値は入っていない状態だからお手上げだな

502:デフォルトの名無しさん
07/07/30 23:55:44
>>501
お手上げですか

なにか手はないものでしょうか・・

503:デフォルトの名無しさん
07/07/31 00:03:14
>>498
はい。
家計簿を作ってるんですが、
1~12月までの費目別合計の推移を DSUM 関数で出しています。
=DSUM('1'!A:H,'1'!F1,分類!A1:A2) ←1月
=DSUM('2'!A:H,'2'!F1,分類!A1:A2) ←2月
=DSUM('3'!A:H,'3'!F1,分類!A1:A2) ←3月
(以下12月までつづく)

>>492 の例に当てはめると、セルD1に
=DSUM('1'!A:H,'1'!F1,分類!A1:A2)
と表示されています。
この数式を使えるようにするために、paste spacial → values の作業をしています。
「A1:A2」の部分だけを何度も変更できるように、
セルD1は複数のセルを&でつないでおり、「A1:A2」の位置には特定のセルを指定し、
そのセルに好きなセル範囲を書くだけでいいようにしています。

504:デフォルトの名無しさん
07/07/31 00:16:55
>>502

Private Sub UserForm_Activate()
Me.ComboBox1.DropDown
Me.ComboBox1.Value = 5
End Sub

こうゆうこと?

505:503
07/07/31 00:51:56
当初考えていたやり方じゃないけど解決しました。
有難う御座いました。

506:デフォルトの名無しさん
07/08/01 13:38:16
Excelからメールを送ろうとCDOで組んだのですが宛先があっていれば普通に送れるのですが、アドレスが間違っていて存在しないアドレスに送っていてもエラーが帰ってきません。

このエラーを得る方法はありますか?

507:デフォルトの名無しさん
07/08/01 18:43:08
あります
でもExcelの話じゃないので、ここでは聞かないでね

508:デフォルトの名無しさん
07/08/01 19:06:24
CSVをADOの「Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=~」で扱うのは
office2000以上だと標準で利用できますか?
参照設定の設定も不要でいいんでしょうか?

509:デフォルトの名無しさん
07/08/01 19:07:12
当然参照設定は必要

510:デフォルトの名無しさん
07/08/01 19:15:24
>>509
マジ?なんも設定しなくても使えたんだけど・・・
ちなみに何を設定すればいいんですか?

511:デフォルトの名無しさん
07/08/01 19:18:37
もしかしてCreateObjectで参照してる?

512:デフォルトの名無しさん
07/08/01 19:28:25
Private Sub CommandButton1_Click()
Set rs = CreateObject("ADODB.Recordset")
Con = ""
Con = Con & "Driver={Microsoft Text Driver (*.txt; *.csv)};"
Con = Con & "DBQ=C:\Documents and Settings\Administrator\デスクトップ\新しいフォルダ;"

strSQL = "select * from test.csv"
rs.Open strSQL, Con, 0 '0=adOpenForwardOnly

cols = rs.Fields.Count
Do Until rs.EOF
Line = ""
For i = 0 To cols - 1
Line = Line & rs(i) & vbTab
Next
Debug.Print Line
rs.MoveNext
Loop

End Sub

513:デフォルトの名無しさん
07/08/01 19:29:32
こんなん書いて 今家でも試したけど出来た

CreateObjectだね

CreateObjectだと参照設定しなくても出来るということでおk?

514:デフォルトの名無しさん
07/08/01 20:05:43
>>506
URLリンク(www.asahi-net.or.jp)
ググったら見つけました


515:デフォルトの名無しさん
07/08/01 22:14:09
エクセルを開こうとするといきなりインストールしだしてエラー表示がでました。
プロパティを開いてプログラムを見ると不明なアプリケーションとなっております。
これは何故でしょう?
またこれを解決する方法はどうすればいいのでしょうか?


516:デフォルトの名無しさん
07/08/01 22:17:30
>>513
そうだよ。それが遅延バインディング。
欠点として、参照設定してきちんと型を指定して使う早期バインディングより
速度が遅いと、確かヘルプに書かれているはず。

517:デフォルトの名無しさん
07/08/01 22:18:02
初心者です。
if,do,for等の分岐式や繰り返しコードを使うと必ずバグが出ます。
バグが出ないように皆さん何か心がけている事ってありますか?

518:デフォルトの名無しさん
07/08/01 22:21:59
参照設定しないと遅いのもあるけど、コーディングしにくくない?

519:デフォルトの名無しさん
07/08/01 22:55:03
参照設定ってexcelファイルにするの?
excel環境にするの?

520:デフォルトの名無しさん
07/08/01 23:05:13
ブック単位だな。
ちなみに、普通のVBだとプロジェクト単位。

521:デフォルトの名無しさん
07/08/01 23:47:31
>>515
VBA関係ねえ

522:デフォルトの名無しさん
07/08/01 23:53:15
>>520



523:デフォルトの名無しさん
07/08/02 07:40:47
ADOで
csvテーブル(Microsoft Text Driver接続)と
Excelシートテーブル(Microsoft Excel Drive?接続)の
SQLでの連結ってできる?

524:デフォルトの名無しさん
07/08/02 18:21:00
VBAでListViewとかTreeViewを組み込んで OLEDragDropとか使うのは、
VBがある環境じゃないとライセンス違反とか聞いたんだけど、ほんと?
なんかMSのページ見に行ってもどこに情報があるのか良くわからん。。

使えるのに使っちゃダメとかなんだったらひどい話だよなあ。

525:デフォルトの名無しさん
07/08/02 18:24:58
vbaでSQLite使う方法ある?

526:デフォルトの名無しさん
07/08/02 18:28:46
あるよ

527:デフォルトの名無しさん
07/08/02 18:33:07
どうやるのか教えて

528:デフォルトの名無しさん
07/08/02 21:21:54
>>524
> ライセンス違反とか聞いたんだけど、ほんと?
うん、ライセンス違反だよ

ListViewとかTreeViewはVB6ランタイムを入れるとVBAからも使えるようになるが、本来VB6ランタイムというのは有料ソフトの付属品
VB6で作ったソフトを動かす為に必要なので、特定条件下で無料再配布が許可されているが、当然、使用はライセンスに縛られた範囲になる

で、使用して良い範囲が、VB6を持ってない人(VB6ランタイムを借りてる人)ではVB6で作られたソフトからの利用のみで
VB6を持ってる人(VB6ランタイムを購入した人)は自分の環境内で好きなように使って良くて
VB6Proなどを持ってる人(VB6ランタイムとその再配布権を購入した人)は自環境内で好きなように使って良いのに加えて
自作ソフトに同梱して配布することも出来る

無料で配布されているとは言え、VB6を持ってない人には有料ソフトの一部を条件付きで貸してるだけということをお忘れなく

> 使えるのに使っちゃダメとかなんだったらひどい話だよなあ。
世の中、出来るけどやっちゃいけないことで溢れかえっているけど、こんな事にも気付いてないほどお子ちゃまなの?
おそらくピッキングが出来れば君の家にある君が所有権を持つ物品類を盗むことも「出来ること」だが
この「出来ること」をやっちゃダメだと法的に定めるのはひどい話なのかな?
君の所有物に対して、所有権において他者の使用を制止・制限出来るのと同じで
MSの著作物に対しても、著作権において他者の使用を制止・制限してるだけのことなんだけど

529:デフォルトの名無しさん
07/08/02 21:47:51
>>528
> 特定条件下で無料再配布が許可されているが、
おー、そういうからくりなのか。ぜんぜん知らなかった。
勉強になるなあ。ありがとう。

> 世の中、出来るけどやっちゃいけないことで溢れかえっているけど、
> こんな事にも気付いてないほどお子ちゃまなの?
お子ちゃまレベルなのは認めるよ。
趣味でスクリプト組んでいるんであって、
プロで開発やってるわけじゃないもん。

もうちょっと「だめであること」がわかりやすくなっていても
いいんじゃないか?と思ったよ。だめならだめでさ。

530:デフォルトの名無しさん
07/08/02 21:56:24
それを言うなら鍵あいてた家のトイレでウンコしていいかとかそんな所だろ。
どっちもどっちだし窃盗みたいにものすごく悪いって程ではないけど、一応ダメ。
見つかって話がこじれたり目に余るような有様だと裁判沙汰にもなるわなw

531:デフォルトの名無しさん
07/08/02 23:37:16
>>529
技術や知識レベルとかプロ意識の問題じゃなかろう
約束やルールを守れないのは子どもだってこと

ただまあ524がそこまで言われるようなことかと言うと
「そういうもんなんだから諦めな」で済むような気もする


532:デフォルトの名無しさん
07/08/03 00:20:16
そんなことよりvbaからSQLite使う方法教えろ

533:デフォルトの名無しさん
07/08/03 04:43:19
ググれカス!

534:デフォルトの名無しさん
07/08/03 21:25:19
vba sqlite odbc でぐぐって判らんかったら諦めれ

535:デフォルトの名無しさん
07/08/03 21:26:25
ブレークポイントでプログラム中断した時、変数にマウスポインタあてると
内容が表示されるのが表示されなくなりました
設定とかいじってないのに何ででしょう?

536:デフォルトの名無しさん
07/08/03 22:14:43
VBAを記述中にカーソルが勝手に戻ったり、コメントを記入中に勝手に変換確定されるのですが
どうすれば回避する事が出来るのでしょうか?

例えば

Sub | ←このような時に Sub| ←このようにカーソルが戻ってしまうんです。
わーくしー ←このように入力中に勝手に確定されるのです。

よろしくお願いします。

537:デフォルトの名無しさん
07/08/03 22:29:04
スペースが全角だから自動で半角になってるんじゃないか

538:106
07/08/04 07:49:36
'Sub |

539:デフォルトの名無しさん
07/08/04 10:42:33

助けてください。2列目以降をソートしたいのですが、

Range("A1").Sort _
Key1:=Columns("B") _
, Order1:=xlAscending _
, Header:=xlGuess _
, Orientation:=xlTopToBottom

だと、
実行時エラー'1004'
RangeクラスのAutoFilterメゾットが失敗しました。


Range("A1:L100").Sort _
Key1:=Columns("B") _
, Order1:=xlAscending _
, Header:=xlGuess _
, Orientation:=xlTopToBottom

だと、
エラーはでませんが、まったくソートがされません。
F8を叩くと、セルはA1を指しています。
同じファイルをマクロで実行したソースを貼っても駄目でした…。
よろしくお願いします。

540:539
07/08/04 10:45:32
↑すいません。

○RangeクラスのSortメゾットが失敗しました。
×RangeクラスのAutoFilterメゾットが失敗しました。

です。

541:デフォルトの名無しさん
07/08/04 15:47:25
決められた範囲内(セル内)のデータをcsvファイル形式でセーブしたいのですが…
どんなプログラムになるでしょうか?

542:デフォルトの名無しさん
07/08/04 16:10:48
>>542
マクロ記録でSaveAs...してみれば判ると思う。

543:542
07/08/04 16:11:49
>542は>>541ね。

544:536
07/08/04 19:19:49
最初にOption Explicitを入れたので、原因はそれっぽいのかな。
まだ、検証してませんが

545:デフォルトの名無しさん
07/08/04 19:51:05
>Option Explicitを入れたので、原因はそれっぽいのかな。

Option Explicitは常に入れているが、そんな話聞いた事が無い。

546:デフォルトの名無しさん
07/08/04 23:56:25
Sheet1
□ りんご
□ みかん
□ いちご
□ ぶどう

Sheet2
┌───┐
│りんご    │
│みかん   │
└───┘

図のようにシート1にあらかじめ入力されているデータを選択し
シート2にあらかじめ作成しておいた表の特定のセルに自動転記され
表が完成する。 という動作を行いいたいのですが
まずシート1でチェックボックスで選ばれた項目だけを
表に反映させるというのがわからないです。。


547:デフォルトの名無しさん
07/08/05 00:43:42

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が

548:デフォルトの名無しさん
07/08/05 01:09:41
>>546
Sheet1.CheckBox1でプロパティ値にアクセスできるし
changeイベントもあるからお好きなように

549:デフォルトの名無しさん
07/08/05 16:42:45
タスクみたいなタイマーで2時間に1回プログラムを実行させるにはどーすればいいの?

550:デフォルトの名無しさん
07/08/05 20:56:56
タスクを使えばいいんじゃね?

551:デフォルトの名無しさん
07/08/06 03:44:01
OSはVistaです。

エクセルで完成させた表を印刷しようとするとエラーになります。
通常のインターネットなどのページを印刷するのは可能なのですがエクセル・ワードだけはエラーがでてしまいます。
パソコンでプリンターの状態を見たら「アイドル」になったままで何をしても変わりません。

だれか助けてください。

552:551
07/08/06 03:45:26
スマソ。
板違いだった。
総合相談所スレにいってきます。

553:デフォルトの名無しさん
07/08/06 15:13:05
お世話になります。

accessからodbcを利用してプロシージャを実行させようとしているのですがエラーになって実行できません。

--ソースの一部----------------------------------
 Dim tmp_qd As QueryDef

 SQL = "exec プロシージャ_hoge"

 tmp_qd.SQL = SQL

 Set tmp_rs = tmp_qd.OpenRecordset()
------------------------------------
vbは良く分からない(初めて3日くらいです)のでこれでソースが足りるか分かりませんが、
上記の「tmp_qd.OpenRecordset()」でエラーが発生しています。
内容は
 「 ODBC--呼び出しは失敗しました。 」
とダイアログに表示されます。

エラーの原因がなんだかわかりません。
お手数ですが、お願いいたします。


554:デフォルトの名無しさん
07/08/06 15:28:04
動いたら奇跡

555:デフォルトの名無しさん
07/08/06 15:53:57
>>554
他のコードです。
Dim db As Database
Dim qd As QueryDef
Dim rs As Recordset

Set db = CurrentDb()
qd.Connect = glcnst_ODBCConnect
qd.ReturnsRecords = True
qd.ODBCTimeout = 0

SQL = "exec pro_hoge"

qd.SQL = SQL

Set rs = qd.OpenRecordset()

何か文法等間違っている箇所があるのでしょうか?
お願いします。



556:デフォルトの名無しさん
07/08/06 17:39:57
currentdbはaccessでしか使えないし
sqlが何かわかってないし
どこが間違ってるかとかいうよりも
ちょっとずつしっかり勉強したほうがいいよ

557:デフォルトの名無しさん
07/08/06 18:58:04
>>556
了解しました

558:デフォルトの名無しさん
07/08/06 19:44:23
初めてカキコします。
スキルもないのに仕事を押し付けられた入社1年目の者です。
日報なのですが、日付を入力したら、その日の売上、仕入を表示できるようなプログラムはあるのでしょうか?
ご教授お願い致します

559:デフォルトの名無しさん
07/08/06 19:47:29
作ろうと思えば作れる。
ここは、そういうものを作る側のスレッド、板。

560:558
07/08/06 20:37:56
>>559
期限はないので勉強して作ってみます。
ありがとうございます

561:デフォルトの名無しさん
07/08/06 20:49:01
そんなん関数でやればいいじゃない

562:デフォルトの名無しさん
07/08/06 21:56:57
>>561
>日付を入力したら、その日の売上、仕入を表示できるようなプログラム

を関数で出来んのか?

563:デフォルトの名無しさん
07/08/06 22:20:15
>>562
横からだけど
関数で引っかかるのはどこだろう?
セルに日付を入れると別のシートにある売り上げと仕入れ
VLOOKUPでは駄目なのだろうか?


564:デフォルトの名無しさん
07/08/06 22:54:58
VBAを使って自分自身にジェクトのロック・アンロックをかけたいのですが
可能ならば教えてください

565:デフォルトの名無しさん
07/08/06 22:55:40
>>564
プロジェクトのロック・アンロックでした

566:デフォルトの名無しさん
07/08/07 09:43:03
>>564
可能だけど、それを自分で調べられないレベルの奴は
プロジェクト自体やモジュールをコードで弄るのはやめた方がいい
あと、やるならプロジェクトへのアクセス許可出さないとだめだからね

567:558
07/08/07 19:02:10
VLOOKUP関数で出来ました!
検索値を日報の日付の部分にしたら解決しました。

568:デフォルトの名無しさん
07/08/07 19:12:56
初めて質問させていただきます。

XML文書の妥当性チェックをXMLスキーマで行うため、以下のようにXMLSchemaCacheにaddしようとしたところ、②の段階でエラーが発生します。

①スキーマキャッシュオブジェクトの生成
Dim objScm As New MSXML2.XMLSchemaCache
②スキーマをキャッシュに追加
objScm.add "urn:bookList","C:\book.xsd"

実行時エラー スキーマのルート要素に対する定義が無効です。

どのようにすれば@ITの記事を参考にしてやっているのですが、どのようにして回避できるのかわかりません。環境はExcel2000, MSXML2.6を使用しています。よろしくお願いします。



569:デフォルトの名無しさん
07/08/07 20:55:54
MSXML2使うなら、これはExcelとは関係ないものなのでスレ違い

570:デフォルトの名無しさん
07/08/07 21:22:30
>>569
小さい野郎だな、静かにしろ

571:デフォルトの名無しさん
07/08/07 21:47:36
何でも斜に構えて、規律なんて糞食らえ、俺は大きな人間さ
というスタンスで居るのがカッコイイと思ってる年頃ってあるよねw

572:デフォルトの名無しさん
07/08/07 22:00:20
ゆとりはもう一度文章を読み返してから書き込もうぜ

573:568
07/08/07 22:01:44
>>569
XML総合と迷ったのですが、Excelマクロを用いてのXML操作ということで、ここはひとつお目こぼしを。

>>570
わたしのほうもスレ違いと言われて当たらずとも遠からずかもしれません。原因の一端は確実にわたしにありますので、あまりお責めにならないよう。

>>571
そういう時期は確かにありました。実際にカッコイイことはないと思うのですが、根拠レスに自分で自分をカッコイイと思える平和な時期だったのだと思います。

574:デフォルトの名無しさん
07/08/07 22:18:13
>>566
そー言わずになんかヒントちょうだい


575:デフォルトの名無しさん
07/08/07 22:25:08
>>573
だまってろカスブタ

576:デフォルトの名無しさん
07/08/07 23:25:53
Dim a, b
dim r as range

a = Split(Replace(r.Value, "@", " "), " ")

b = Split(Replace(r.Value, "a(0)", "*"), "*")

bはaで分割した最初の文字列を*に変換、*で分割といった感じにしたいのですが、
素人でよく分りません。よろしくお願いします。

577:デフォルトの名無しさん
07/08/07 23:30:25
"a(0)" -> a(0)
じゃだめか?

578:デフォルトの名無しさん
07/08/07 23:44:11
>>577

おお、できましたぁ!!!ありがとうございます~ペコリ

579:デフォルトの名無しさん
07/08/07 23:56:01
ただ、それだったら
a = "*" & mid$(r.Value,instr(r.Value,"@"))とかのが何ぼか軽いんじゃない?
(注:offsetの誤差は考慮してない)

580:デフォルトの名無しさん
07/08/07 23:57:13
あ、*でsplitしてるのか、ごめん勘違い

581:デフォルトの名無しさん
07/08/08 09:40:48
>>573
> Excelマクロを用いてのXML操作ということで
それはVBAの範疇じゃない
VB言語で[A]pplication(Excel)を操作するからVBA
これからAを取ったらVBなので、Excel付属のVBE使ったとしてもVBの分野

582:573
07/08/08 12:00:35
>>581
わかりました。他スレで質問させていただくことにします。お騒がせしました。

583:デフォルトの名無しさん
07/08/09 21:09:41
excelのvbaを使ってます。

ユーザーフォームで作成した複数のtextboxについて、コードを入力するとき

例えば
if textbox1 = ~ then
end if
if textbox2 = ~ then
end if
if textbox3 = ~ then
end if
などとせず
textboxの連番をうまいこと使ってまとめることってできないでしょうか?

584:デフォルトの名無しさん
07/08/09 21:21:27
あらかじめオブジェクト配列にでもセットしておけば?

585:デフォルトの名無しさん
07/08/09 21:21:57
>>583
~の内容とThenからEnd Ifの間次第なのに肝心な所を略してどうするの。

for i = 1 to 3
if Controls("textbox" & i) = ~ Then Stop
next

こういう事?

586:デフォルトの名無しさん
07/08/10 02:31:18 BE:703008239-2BP(218)
SolverAdd CellRef:=constraintCell.Address, Relation:=2, FormulaText:="1.00"

これで 拘束条件が 追加されないびょん
しかも、あるブックだけ・・・
どいうこと?

587:デフォルトの名無しさん
07/08/10 02:35:35 BE:390559853-2BP(218)
しかも、同じブックの その他のSolverAddは 動作するし・・・ なんなの? いやがらせ? > Excel 2003

For Each r In changeRange
SolverAdd CellRef:=r, Relation:=3, FormulaText:=0.0002
SolverAdd CellRef:=r, Relation:=1, FormulaText:=0.9998
Next r
は 動作するw

588:デフォルトの名無しさん
07/08/10 04:29:33 BE:1458089478-2BP(218)
"1.00" の代わりに "R1C10" にすると追加されたw
なんで0.0002や0.9998は問題ないのやら?w

589:デフォルトの名無しさん
07/08/10 04:44:49 BE:104149722-2BP(218)
"1.00"の代わりに 1 や 1# でも追加されないびょんw 0.999は追加されたw
変な ブックw

590:デフォルトの名無しさん
07/08/10 04:48:30 BE:416596782-2BP(218)
"1.00"の代わりに"0.999"にしたら追加されたw そんなに 1が嫌いなのか!

591:デフォルトの名無しさん
07/08/11 01:19:24
あまりにも単純な質問で申し訳ありませんが質問させてください。

VBAでユーザーフォームのテキストBOXにセルの内容を表記
させる事は普通には出来るのですが、セル内容が時刻の場合
上手くいきません。

セル(A1)がActiveとして10:00と入力されています。
それをtexttbox1に表記させるため

Userform1.textbox1.value = Activecell

とすると、表示されるのは「0.416666666666667」という不可解な
表記なんです。

「10:00」と表記させる方法をご教示下さい。


592:デフォルトの名無しさん
07/08/11 01:46:00
>>591
Userform1.textbox1.value = Activecell.Text

593:デフォルトの名無しさん
07/08/11 02:59:16
>>592
> >>591
> Userform1.textbox1.value = Activecell.Text

ありがとう御座います。セル側にtext指定するとは気がつきません
でした。本当に助かりました。

594:デフォルトの名無しさん
07/08/11 17:42:24
すみません、質問です。

マクロの閲覧などをロックしても、ある種のツールで解除出来たりしますが
これを回避する方法は、他のツールソフトなどを利用するしか、
手段は無いのでしょうか?

その場合、出来ればフリーで良いツールは有りませんか?

595:デフォルトの名無しさん
07/08/11 18:00:28
変数名をランダム&グローバルにして
クラス使わずすべて標準モジュールに記述
標準モジュールもランダムな名前で100個ぐらい作る
関数も全く関連性のないものを各々10個ぐらい用意
さらに関数もgoto文多用で1000ステップ
このくらいやれば自分も解析する気にならない
マジおすすめ

596:デフォルトの名無しさん
07/08/11 18:54:45
>>594
VBAプロジェクトの保護は、初心者の不用意な改変を防ぐ「ロック」であって
閲覧や漏洩を阻止する「セキュリティー」ではありません

そもそも、Excelは開発環境ではないのでソースの漏洩を防止しようとすること自体が間違い
Microsoftは強固なセキュリティーを付けることよりも、万が一パスワードを紛失しても、
膨大な時間を掛けて製作したマクロコードを失う結果に繋がらないように配慮しました
開発環境ではないExcelでは、ソースを書いたモジュール自体が、パスを付ける対象に組み込まれているので
モジュールのエクスポートなどをしていない状態でパスを紛失してパス外しが出来なかったら
コードを全て失うことになってしまうからね

その結果、普通にパスを掛けただけはもちろん、パス解除防止ツールでロックしても、
ちょっと面倒になるだけでパス外し自体は出来るようになっています
君が言う「ある種のツール」はコレ( URLリンク(passmaster.fujigoma.com) )
じゃないかもしれないけど、コレで「VBAパスワード保護」した程度ならちゃんと外せます
因みにコレくらいならVBAでも作れますよ

そして、コードが漏洩しない形でアドインなどを作りたい人には専用ソフトを用意しています
(Visual Studio Tools for Office)

あとは、専用ソフトを使ってでもセキュリティーを付けたいか、専用ソフトを使うくらいなら、
解除できる状態でも良しとするかはあなた次第なので、どうぞお好きなように

597:デフォルトの名無しさん
07/08/11 20:41:21
質問させてください。

会社で、エクセルを使って報告用紙の作成を命ぜられたのですが、
エクセルの知識は一般常識的なものしか持ち合わせていないので、
どなたかご教授願います。

C1の値が、A1~A5のいずれかの値と一致したならば、
E1に、その一致したA1~A5のいずれかのセルの右隣のセルに入力されている値(B1~B5のいずれか)
を表示する。

というような内容の関数を作りたいのですが、ネットで検索して1日悩みましたが、結局分かりませんでした。
私の予想では、IF関数とOR関数を使うような気がするのですが。。。
ちなみに関数は今まで使ったことがありません。プログラムの知識もありません。

どうぞ宜しくお願い致します。

598:デフォルトの名無しさん
07/08/11 20:54:08
>>597
E1に式を突っ込むだけでできると思うのだが。よって、スレ違い。

599:597
07/08/11 20:58:50
>>598
この板ははじめて来るので、よく分かりませんでした。
どこで質問すれば良いでしょうか?

600:デフォルトの名無しさん
07/08/11 21:12:30
>>599
さぁ? Excelの使い方の質問ができるのならどこでもどうぞ。
#あ、鼬害か。

601:597
07/08/11 21:21:27
他の板で聞いて解決しましたのでwww
お前らダッセwww

602:デフォルトの名無しさん
07/08/11 22:49:41
セルに関数入れるのを
プログラムと呼べなくもないような


603:デフォルトの名無しさん
07/08/11 22:51:42
>>602
それでもスレ違いであることには変わりない。

604:デフォルトの名無しさん
07/08/11 23:55:49
>>596
質問した香具師じゃないが
VSに何故VBAの開発環境があるんだ?と不思議に思ってたが
そーゆー事なのかぁ、ためになった

605:デフォルトの名無しさん
07/08/11 23:57:38
>>604
VBAと書いたが、確か違う名前だったね

606:デフォルトの名無しさん
07/08/12 19:08:40
質問です。
エクセルで、印刷ダイアログを表示させて、そのときの印刷のページ範囲を任意で決めたいのですが、VBAで制御できますか?

一応、PrintOutメゾットは知っているのですが、このメゾットを実行させると印刷が自動的に行われてしまうようで、今回の利用の用途には合いませんでした。
あらかじめページ設定に印刷の範囲を指定できればいいのですが・・・ ご教授願います。


607:デフォルトの名無しさん
07/08/12 19:16:56
printpreview

608:デフォルトの名無しさん
07/08/12 22:02:15
>>607
いや、それだとダイアログが出ないから合わないんです。

詳しく書くと
1.何かしらの計算をして、ページ範囲(ページの枚数:1~3ページまでとか)が既に決まっている。
2.印刷する前にダイアログを出す。
3.ページ範囲は、1.より範囲を代入する。
4.ダイアログから印刷プレビューを出す。
5.印刷をする。

この場合、PrintOutメゾットだとFromとToで範囲を決めれたけど、このメゾットだと自動的に印刷までいくので、今回の目的に合わなかったわけです。
一応printpreviewもやってみたけど、このメゾットだと範囲をあらかじめ決めれないらしいので、どうしたものかと困ってしまってます。

609:デフォルトの名無しさん
07/08/12 22:25:21
>>606-608
Application.Dialogs(xlDialogPrint).Show ~

610:デフォルトの名無しさん
07/08/12 22:56:53
>>609
おおなるほど、これなら思い通りに行けそうです。 ありがとうございます!

611:デフォルトの名無しさん
07/08/13 17:34:19
教えて下さい。

マクロで、「エクセルのメニューを操作(開いてる)」 という状態を
判断する方法って有りますか?

612:デフォルトの名無しさん
07/08/15 01:03:01
InputBoxとかでとりあえず何かを入力させて、
その中にある文字列が入っているかで
分岐させるのはどうすればいいんですか?

ある文字列が入っているか調べる関数とかあれば教えてください。

613:デフォルトの名無しさん
07/08/15 01:08:29
>>612
InStr関数

ある文字列の位置を返す関数だが
含まれてなければ0を返すので、0が返ったか1以上が返ったかで
含まれてるか否かを判断できる

614:612
07/08/15 01:27:20
>>613

ありがとうございます。参考にします。

615:デフォルトの名無しさん
07/08/15 03:12:18
散布図のグラフで、Y軸の範囲を1つ右の列にずらすVBAを作りたいのですが
方法がわかりません。例で示すとY軸の値
=Sheet1!$B$2:$B$11

=Sheet1!$C$2:$C$11
=Sheet1!$D$2:$D$11
=Sheet1!$E$2:$E$11
:
と実行するたびにずらしていくマクロです。

固定値でよければ、Y軸を指定するには
 ActiveChart.SeriesCollection(1).Values = "=sheet1!R2C2:R11C2"
などとすればよいことがわかりましたが、相対移動のためにたとえば、
 ActiveChart.SeriesCollection(1).Values = ActiveChart.SeriesCollection(1).Values.Offset(0,1)
とはできません。

調べたところ、.Values を参照するとバリアント型で配列が返るところまではわかったのですが、
そこで力尽きました。。


616:デフォルトの名無しさん
07/08/15 05:28:39
自己レスです。

その後、検索したところ指定範囲が .SeriesCollection(1).Item(1).Formula で
文字列で得られることがわかりました。ですので、文字列処理をひたすらやって、
.SeriesCollection(1).Values
に突っ込むことでなんとかできるようになった感じです。
お騒がせしました。
# 結局、これで徹夜になったなぁ。



617:nanashi
07/08/15 14:09:52
以下のことがしたいのですが、VBAで対応可能でしょうか?
シート1で文字列を検索して、検索した文字を違うシート2のB1セルに貼り付けます。
続いて検索した文字の一つ上のセルを違うシート2のA1に貼り付けます
さらに検索した文字の一つ下のセルを違うシート2のC1に貼り付けます。
検索された文字をA2,A3...と貼り付けていくようなものをつくりたいです。
できればシート1でのセル情報(セルの色や取り消し線)もあわせてもってこれると
うれしいです。
よろしくお願いします

618:デフォルトの名無しさん
07/08/15 14:57:08
>>617
マクロの記録結果見て考えろ

619:デフォルトの名無しさん
07/08/15 14:58:51
充分可能ですね。

620:デフォルトの名無しさん
07/08/15 15:46:47
phpでいうところの変数展開「var_dump()」みたいなものって、vb(vba)にはないのでしょうか?


PHPは2年ほど触っているのですが、仕事でvbaをしなければならなくなりました。
質問自体はそれほど難解なことではないのですが、なにしろ、基本的な知識をぶっ飛ばして作成に入っているため、つまらないことで躓いています。
よろしくお願いいたします。


621:デフォルトの名無しさん
07/08/15 16:05:41
ウォッチ式のことかね

622:デフォルトの名無しさん
07/08/15 17:27:02
>>620
PHPと違ってデバッガがあるので、それを使えばvar_dumpなんぞ不要。
ブレークポイント、ウォッチ式、イミディエイトウインドあたり調べてみ。

623:デフォルトの名無しさん
07/08/15 17:34:42
>621さん
簡潔なお答え、ありがとうございます。笑
(上段はさておき、そんな言葉すら知りませんでした。)

頂いたヒントをもとに調査した結果、「現在変数に入っている値を見る方法」がわかりました。
「ローカルウインドウ」なるものの存在を知ったので、たぶん、問題は解決。

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



624:デフォルトの名無しさん
07/08/15 17:38:01
>622さん

立て続けに申し訳ありません。
解決しましたので、そのご報告です。

ずっとphpを触ってきたので、すっかりvar_dumpのトリコになっていました。
開発をしていると値の内容を知ることが重要で、それをもたらしてくれるvar_dump、なんて素敵な関数なんだろう、と感動していたところです。

よくよく考えると、結果を表示する画面というのもエクセルにはなく(たぶん、ないですよね)、結果、ローカルウインドウを使うことに決めました。

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


625:デフォルトの名無しさん
07/08/15 22:11:00
Debug.Printをフラグ管理して、イミディエイトウインドに値を表示させるのもひとつの手かと
コードは多少汚くなるけど、必要な値だけ取り出せる。

626:デフォルトの名無しさん
07/08/15 22:28:10
すいません、VBA初心者なんですが、2点程質問があります。
どなたか教えて頂けたら幸いです。

1、Application.GetOpenFilenameにてファイル名を取得するんですが、
  この時、「ファイルを開く」ダイアログボックスに自分が指定した
  フォルダが最初から開かれているようにしたいんですが、可能なのでしょうか?

  例えば C:\test のフォルダを指定したら、ダイアログボックス
  を開いた時に、testフォルダ内のファイルが見れている状態です。



2、1つの列にロックをかけた場合、他のセルの右クリックの「挿入」、
  「削除」、「セルの書式設定」と言ったメニューが使えず、
  制限されてしまうんですが、その列をロックをしたまま、上記メニュー
  を使えるようにする事は可能なのでしょうか?


自分で解決できなかったので、
どなたかご存知の方いましたら、宜しくお願いします。


627:デフォルトの名無しさん
07/08/15 22:57:19
>>626
ChDrive()やChDir()でカレントフォルダを変更。
ただし、例外の処理をちゃんとしないとうまく動かない。

別に、Application.GetOpenFilenameをやめてWindowsAPIを使う方法もあるが、
ややスキルが必要。

>>1つの列にロックをかけた場合、

これ意味不明。kwsk。


628:デフォルトの名無しさん
07/08/15 23:17:33
>>627さん
ありがとうございます。

今までカレントフォルダを変更しただけで、例外の処理をしてませんでした。
ちょっと例外処理とAPIについて自分で調べてやってみます!

>>1つの列にロックをかけた場合、

というのは、例えばB列のセルの内容を編集をできないようにロックした場合、
という意味です。(B列のセルをダブルクリックしたら編集不可のメッセージが出ます。)
このB列をロックしてしまうと、他の編集可能なセルにも影響が及んでしまうんです。

編集可能なセルだけ、通常の右クリックのメニューを使えるようにする
事はできるのでしょうか?



629:デフォルトの名無しさん
07/08/16 00:15:03
>>628
「ロック」というのはデフォルトで全部のセルにチェックがついてる。
おまえさんが言ってるのは「シートの保護」のことか?


630:デフォルトの名無しさん
07/08/16 01:10:49
無理してShellコントロールでやってみたがSetdirectoryしてからダイアログ呼ぶ方が綺麗で簡単だわな

'Shellを使うには Microsoft Shell Controls And Automation をインクルードしておくこと
Dim objShApp As Shell
Dim strPath As String
Dim objFld As Folder2
Set objShApp = New Shell

Set objFld = objShApp.BrowseForFolder(0, "フォルダを選択してください", _
BIF_SHAREABLE + BIF_NONEWFOLDERBUTTON + BIF_NEWDIALOGSTYLE + _
BIF_RETURNFSANCESTORS, ThisWorkbook.Path)
If objFld Is Nothing Then
Exit Sub
End If

strPath = objFld.Items.Item.Path
MsgBox strPath

Set objFld = Nothing
Set objShApp = Nothing

631:デフォルトの名無しさん
07/08/16 02:58:56
かなりの初心者です
セルに格子の表を作りたいのですが、メッセージボックスなどで表示・入力させて、毎回、表の大きさを自由に変えられるような、マクロは作れますか?

"A1:J10"と指定して表作れとかなら、何とかわかるのですが・・・

ご指導、よろしくお願いします

632:デフォルトの名無しさん
07/08/16 03:33:11
マルチページやタブストリップで、ページの背景をかえても、
タブがグレーのままなのです。
タブにも背景色を設定することは出来ないでしょうか

633:デフォルトの名無しさん
07/08/16 06:01:24
>>631
REFEDITコントロールを使うとか

634:デフォルトの名無しさん
07/08/16 11:05:41
>>631
言ってる事判んないけど、例えば次のような感じなら簡単だと思う

1 マウスで左上のセルを指定

 *** ここからマクロ ***
2 inputbox関数で大きさを指定。例えば、5-10
3 マクロで5行10列の格子を引く
 *** マクロ終り ***

635:631
07/08/16 11:51:07
>>633-634

これから、やってみます
本当に有難うございました

636:デフォルトの名無しさん
07/08/16 12:32:47
>>631
以前、同じことやろうとして、判らなかった。
自分しか使わないマクロだったんで、
マクロ起動前に、処理したいセル範囲を選択しておく、という方法にしてしまった。
お望みの解ではないですが、参考まで。


637:デフォルトの名無しさん
07/08/16 13:39:16
inputbox関数じゃ無くinputboxメソッド使えばいいじゃん?

638:デフォルトの名無しさん
07/08/16 13:50:51
inputboxメソッドで始点(左上)と終点(右下)をマウスで指定すれば、
キーボードで入力しないでも出来そうな気がするのだが...。

639:デフォルトの名無しさん
07/08/16 18:46:59
できた(力作)
Sub セルに格子の表を作りたいと思った時のマクロ()
Const colwidth = 3 '枠の幅0-
Const colcount = 9 '枠の列数1-
Const RowHeight = 4 '枠の高さ0-
Const rowcount = 3 '枠の行数1-
Const セル = "C7"
topline = ""
bottomline = ""
centerline = ""
charline = ""
topline = "┌" '***
For i = 1 To colcount
For m = 1 To colwidth
topline = topline & "─"
Next
If i < colcount Then topline = topline & "┬"
Next
topline = topline & "┐" '***
centerline = "├"
For i = 1 To colcount
For m = 1 To colwidth
centerline = centerline & "─"
Next
If i < colcount Then centerline = centerline & "┼"
Next
centerline = centerline & "┤"

640:デフォルトの名無しさん
07/08/16 18:47:43
For i = 1 To colcount '***
charline = charline & "│"
For m = 1 To colwidth
charline = charline & " "
Next
Next
charline = charline & "│"
bottomline = "└" '***
For i = 1 To colcount
For m = 1 To colwidth
bottomline = bottomline & "─"
Next
If i < colcount Then bottomline = bottomline & "┴"
Next
bottomline = bottomline & "┘"
myspread = topline
For i = 1 To rowcount
For m = 1 To RowHeight
myspread = myspread & vbLf & charline
Next
If i < rowcount Then myspread = myspread & vbLf & centerline
Next
myspread = myspread & vbLf & bottomline
Set rf = Range(セル).Font
rf.Name = "MS ゴシック": rf.FontStyle = "標準": rf.Size = 11
rf.Parent = myspread: rf.Parent.ColumnWidth = (2 + colwidth * colcount) * 3
rf.Parent.RowHeight = (2 + RowHeight * rowcount) * 15
End Sub

641:デフォルトの名無しさん
07/08/16 23:51:00
vlookupの関数でできると思います。
詳細はHELPを参照してください。




642:デフォルトの名無しさん
07/08/17 22:54:06
とりあえず、客の名前と住所が入力されたシートがあるんですが、
膨大な数が入力されてます。

例えば、

「東京都新宿区西新宿」

などと住所を入力したら、その文字が含まれる列、行だけが
表示される、みたいな事って出来ますか?

643:デフォルトの名無しさん
07/08/17 23:55:20
できます。

644:デフォルトの名無しさん
07/08/17 23:56:45
>などと住所を入力したら、
どこに入力するの?
複数該当する時はどうするの?
もっと詳しく具体的に!
ってゆうか目的は何ですか?

いずれにしても、VBAじゃないと出来ないと思う

645:デフォルトの名無しさん
07/08/18 00:05:36
目的はわかるだろw

646:デフォルトの名無しさん
07/08/18 00:50:13
顧客リストから自分の土地勘のある場所に住んでいる客を抽出して、ストークするんですね?

647:デフォルトの名無しさん
07/08/18 12:03:37
何故Accessを使わない

648:デフォルトの名無しさん
07/08/18 21:18:47
何故オートフィルタを使わない

649:デフォルトの名無しさん
07/08/19 13:39:36
一つの列に順に大量のデータ(人名)を入力していくのですが
その際、遊びで一人分入力するのにかかる時間を計るタイマーを
ユーザーフォームで表示するというマクロを作っています
タイマー部分はOnTime関数を使って基本はできたのですが
セルに入力中はタイマーの時計表示が止まってしまいます
入力中はマクロの実行自体が止まってるようなんですが
これを動かし続けることはできませんか?
(入力して確定「後」にかかった時間を表示するのはできました)


650:デフォルトの名無しさん
07/08/19 14:14:45
Excelから切り離して動かせばいい
操作はウィンドウメッセージを使うことになるがそう面倒でもあるまい
VBAの範疇を出る話なので、あとはご自分で

651:デフォルトの名無しさん
07/08/19 14:16:25
ユーザーフォームから入力すれば良いかも?

652:デフォルトの名無しさん
07/08/19 18:50:37
Dim time As Variant
Function settime() As Variant
time = Timer
End Function
Function gettime() As Double
gettime = Timer - time
End Function
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
mytime = Format(gettime, "####.00")
ThisWorkbook.Application.Caption = mytime
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
settime
End Sub


653:649
07/08/19 21:34:16
>>650
ありがとうございます。Excelから切り離すってことはVBかなんか使って別アプリにしてしまう
ということですよね?VBA以外やったことないんですが・・・これを機に勉強しようかな
>>651
ありがとうございます。
あくまで入力作業中のおまけというかアクセサリ的なものとして表示させておくつもりだったので
その発想はなかったです。試しにやってみたらフォーム上のtextboxへの入力中ならちゃんと
タイマーを表示するマクロも動き続けますね。とりあえずこの方法でやってみます。
>>651
わざわざコードまで書いてもらって恐縮です。
言葉足らずで申し訳ありませんでしたが、入力確定後にかかった時間を表示するだけじゃなく
入力中もかかってる時間を表示させ続けたいのです。

654:デフォルトの名無しさん
07/08/19 21:45:48
>>639
エラーでます

655:デフォルトの名無しさん
07/08/20 02:39:20

こんな有用なスレがあったんですね。
早速ですが、1つ教えてください。

Excelで、次のようなことがしたいのですが、どのようにしたら良いでしょうか。
・事前に、ユーザーが新規ブックを開いておく
・そのままの状態で(ボタンなどを押すことなく)
・PCのCOMポートから送られてくる文字を、順番にセルに書き出す。
   ボタンを押して....のようなイベントの発生による関数の起動ではなく、
   COMポートの受信割込発生をイベントとした関数の起動がしたいのです。

現在は、
シート上に作ったボタンを押すことで、セルに書かれた数字/文字を、PCのCOMポートからRS232Cで送り出したり、
同じくシート上に作ったボタンを押すことで、COMポートを開いて受信状態となり、
数字/文字を受信したら罫表に書き込んだり などは、結構何度も作っているのですが、
今回は、「ボタンを押さなくても」自動的に受信できないかと思うのです。

何か特別な方法が必要でしょうか、あるいは、VBAの関数にすでに用意されているのでしょうか?
宜しくお願いします。


656:デフォルトの名無しさん
07/08/20 06:35:04
Private Sub Workbook_Open()
処理
End Sub

657:デフォルトの名無しさん
07/08/20 21:11:30
1,エクセルの左側にあらかじめ設定している列を折りたためる、ボタンがあるシートがあるんですけど、
どのように設定すればいいのでしょうか?
2、functionを使用して、同じ計算式をマクロに計算させようとすると、5倍位時間がかかるようになりました。
どのような対策を取ればいいのでしょうか?


658:デフォルトの名無しさん
07/08/20 21:21:42
1 そのまんま。そのボタンに列の表示非表示を切り替えるマクロを登録すればいいだけ。
2 ワークシート関数よりユーザー定義関数の方が遅いのは当然だが、そういうことじゃないのか?
 違うなら日本語で質問してくれ。あとそのFunctionの内容も書くこと。

659:デフォルトの名無しさん
07/08/20 22:26:26
>>657
1.グループ化の事か?

660:631
07/08/21 01:22:25
本やみなさんの意見を参考にしながら一応、出来たのですが

Sub セル範囲を指定して格子罫線を引く()

Dim Rng As Range
Set Rng = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8)
Rng.Borders.LineStyle = xlContinuous
End Sub

少し、改造すれば、セル範囲を指定してセルの色を塗り替えるにもできます(せっかく、作ったので、良かったら参考にして下さい)
これに、キャンセルしたときに「入力されませんでした」と表示するようにしたいのですが、どうもわかりません

Sub セル範囲を指定して格子罫線を引く2()

Dim jis As Range
Set jis = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8)
If jis <> "" Then
Rng.Borders.LineStyle = xlContinuous
else
msgbox"シート名が入力されませんでした"
End If
End Sub

上のソースだとエラーになってしまいます
お手数ですが、ご指導お願いします。

661:デフォルトの名無しさん
07/08/21 06:33:33
サンプル

Dim returnData As Variant
returnData = Application.InputBox("データを入力してください", Type:=1)

If VarType(returnData) = vbBoolean Then
MsgBox "キャンセルされました"
Exit Sub
End If

MsgBox "処理を続行します"



662:デフォルトの名無しさん
07/08/21 06:58:45
>>660
インプットボックスメソッドはエラー処理が必要
On Error Resume Next
Set jis = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8)
On Error GoTo 0
こんな感じ。ヘルプ見てね!

あと入力されなかった時はキャンセルにしてしまう場合
If jis Is Nothing Then Exit Sub




663:662
07/08/21 11:16:43
こんな感じかな?

Sub セル範囲を指定して格子罫線を引く662()
Dim Rng As Range

Application.DisplayAlerts = False
On Error Resume Next
Set Rng = Application.InputBox( _
prompt:="セル範囲を指定後 [ OK ] を押して下さい。" _
& Chr(13) _
& "【セルを選択しないと [ OK ] は無効です。】", _
Title:="罫線を引くセル範囲を指定してください", _
Default:="", _
Type:=8)
On Error GoTo 0
Application.DisplayAlerts = True
If Rng Is Nothing Then
MsgBox "中止します"
Exit Sub
Else
Rng.Borders.LineStyle = xlContinuous
End If
End Sub


664:デフォルトの名無しさん
07/08/21 17:59:15
>>660
あなたにとって自慢したい自信作かもしれないけど?敢えて苦言を

>本やみなさんの意見を参考にしながら一応、出来たのですが
何もしないで、OKまたはキャンセル押したらエラーになるよね?
これは「出来た」には程遠い!糸口がみつかった程度。
エラーが出るうちは未完成ですね

>(せっかく、作ったので、良かったら参考にして下さい)
恐らく参考にならないでしょう


Sub セル範囲を指定して格子罫線を引く2() ←コンパイルした?
宣言してない変数があるんだけど。

>If jis <> "" Then
これはマズイよね、"" は文字列だから、変数 jis が String じゃないとエラー起こす。

665:657
07/08/21 22:49:15
>>658
回答ありがとうございます。
1、については、>>657さんの回答で要領を得ました。
2、ワークシート関数よりユーザー定義関数の方が遅くて当然との事ですが、
なんらかの方法で、処理速度を上げられないだろうかとかんがえております。
内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。)

666:デフォルトの名無しさん
07/08/21 23:28:34
>なんらかの方法で、処理速度を上げられないだろうかとかんがえております。
ワークシート関数を使え。
マクロ(VBA)でやりたいなら、ワークシート関数を空きセルに貼ってしまえ。

667:デフォルトの名無しさん
07/08/21 23:39:03
>マクロ(VBA)でやりたいなら、ワークシート関数を空きセルに貼ってしまえ。
遅いんじゃない?
ワークシート関数をVBA上で使うと速いけど。
必要なデータは配列に格納し一気に処理(セル参照を頻繁にしないこと)が最速!

668:デフォルトの名無しさん
07/08/22 00:13:58
>>667 そうだね

速度重視ならワークシート上で計算しない設定に。もちろん数式は使わない

セル参照も最小限に。理想は、
シート上の必要なデータを配列に一気に格納、
結果は全て配列に格納し一気にシート上に書き込む

669:631
07/08/22 00:30:23
>>661-663 わざわざ、ソースを全部書いて頂いて、本当に申し訳ありませんでした

お騒がせしました

670:デフォルトの名無しさん
07/08/22 06:36:51
>>665
>内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。)
実際のコード晒してみれば?

具体的には、Cells( i ,j ) がコードに頻繁に出ると遅くなります。特にLoopの中は避けるべき。
私が始めて作った物は、データ取る為に2万回、書くために30万回、頻繁にCells( i ,j ) が...
おまけに Selectしまくってましたので
処理が終るまで30分以上かかってましたが、つくり直したら20秒ほどで出来た!

671:デフォルトの名無しさん
07/08/22 11:45:58
エクセルでバイナリエディタって作れますか?

672:デフォルトの名無しさん
07/08/22 12:30:58
もちろん作れるよ


673:デフォルトの名無しさん
07/08/22 18:03:10
>>672
ありがとう!

674:657
07/08/22 21:00:20
>>666
出来れば、マクロ内で処理したいと考えております。
シミュレーションファイルを作成中でして、他セルにも複雑な式が入っているので、
単純な関数なら、マクロに放り込んでしまいたいのです。
>>667>>668
配列は考えていませんでしたが、計算結果を返すセルが決まってないため、ユーザ定義関数を使おうと思ったしだいです。
>>670
function A(b,c,d,e)
 b=(c+d)/2
 A=b*e
end

こんな単純な計算を、10~20個織り込み、かつシート上で近似値を算出する計算式を使っているので、
時間がかかります。

675:デフォルトの名無しさん
07/08/22 21:20:16
>配列は考えていませんでしたが、計算結果を返すセルが決まってないため、ユーザ定義関数を使おうと思ったしだいです。
理由になってないんじゃない?
配列を拒否するなら私は手を引くよ!

676:デフォルトの名無しさん
07/08/22 21:31:34
すみません。どなたかご存知でしたらお教えください。
VBAでsleepに該当する命令ってなんでしょうか?
WSHで、WScript.sleep(250)みたいな感じでやっているんですが、
これをVBAでやりたいです。

677:デフォルトの名無しさん
07/08/22 21:44:35
319 名前:名無したん(;´Д`)ハァハァ[sage] 投稿日:2007/08/22(水) 16:08:34 ID:aEA9W/2t
URLリンク(kissho2.xii.jp) 目欄
344 名前:名無したん(;´Д`)ハァハァ[sage] 投稿日:2007/08/22(水) 18:55:20 ID:YevU/rPG
>>319はウイルス。拡張子が怪しすぐる

らき☆すた 27
スレリンク(ascii2d板)

678:デフォルトの名無しさん
07/08/22 21:56:37
>>676
標準モジュールに
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

679:デフォルトの名無しさん
07/08/22 22:07:05
>>678
ありがとうございます。できました。
こんなテクあるんですね。勉強になりました。

680:デフォルトの名無しさん
07/08/22 22:08:37
>>657
オレも

>>656
Timer関数

681:デフォルトの名無しさん
07/08/22 22:10:12
↑誤爆

682:デフォルトの名無しさん
07/08/22 22:39:11
恐れ入ります、質問を失礼します。

Dim st4 As String
Dim r1 As Range,

st4 = Mid(r(1).Offset(2).Value, 5, 10) & "-" & Mid(r(1).Offset(3).Value, 2, 10)

こんな感じで13-1とか2-9といったst4にしたいのですが、
-の後が空欄の時があります。
そういったときは13-のようになってしまいますが、
-の後が空欄の時は13といったように-も表示させたくないです。
こういったことは可能でしょうか?



683:デフォルトの名無しさん
07/08/22 23:03:57
可能です
- は変数ハイフンに入れる 
Dim ハイフン As String
3個の文字列を無条件で&で結合せず
IFで条件分岐してから結合すればよい

ハイフン = "-"
If Mid(r(1).Offset(3).Value, 2, 10) = "" then ハイフン = ""
st4 = Mid(r(1).Offset(2).Value, 5, 10) & ハイフン & Mid(r(1).Offset(3).Value, 2, 10)

684:デフォルトの名無しさん
07/08/22 23:12:03
>>683
おお、できましたぁ!!ありがとうございます!!!
これでボクの仕事がかなり減りました、感謝です♪

685:デフォルトの名無しさん
07/08/22 23:16:40
while ブロックで breakって出来ないの?

686:デフォルトの名無しさん
07/08/22 23:47:11
Exit使えよカス

687:デフォルトの名無しさん
07/08/22 23:53:55
か、かすう?
この俺様に向かって!

688:デフォルトの名無しさん
07/08/23 00:06:25
いつもお世話になります、1点質問を失礼します。無理やり上司から頼まれましたが、自分には無理難題です。
①もし○○○○の後7文字全てが半角英数字だったら、このセルの5文字目~半角スペースに当たるまでをコピー、「α」とする

○○○○0120123456 ○

α=0120123456

○○○○の後7文字に1文字でも全角文字が入っていたら、○○○○の一つ下の行の先頭から半角スペースに当たるまでを全てコピー「α」、さらに2つ下の行の先頭から「か」という文字に当たるまでをコピー、さらに○○○○から先の文字全てを繋げ「β」とする

○○○○あい12うえおあい
0120789123 ○○
Aか

α=0123789123
β=Aあい12うえおあい

できればifでやりたいんですが、
Dim α As String, β As String
Dim r(1) as range '○○○○の行がr(1)とします

If Mid(r(1).Value, 5, 7) = 全部半角英数字 Then  α=Mid(r(1).Value, 5)から" "まで

Else α=r(1).Offset(1).の先頭から半角スペースに当たるまで全て
   β=r(1).Offset(2).の先頭から「か」に当たるまでをコピー&Mid(r(1).Value, 5, 99)

End if

すいません、自分ifの文に弱いものでかなり違うかもしれませんが、こんなマクロにしたいのです。宣言とかの理論は理解してます。お手数ですが、よろしくお願いします。

689:デフォルトの名無しさん
07/08/23 00:21:56
>>688
>>7文字全てが半角英数字
これって、記号類や半角カナはどうする?
とりあえず、半角・全角の判定だけでいいか?
それとも、英数字に限定?



690:デフォルトの名無しさん
07/08/23 00:30:25
とりあえず、半角・全角の判定のやり方だけど、

VBAには文字列の長さを調べる関数が3つある。
Len()、LenB()、LenMbcs()
の3つ。

Len()とLenMbcs()の結果が同じ→全部半角
Len()とLenMbcs()の結果が違う→全角を含む

と判定できる。
ただし、LenMbcs()はVBAには実装されてなくて、自分で書かないといけない。
書き方はMSDNに紹介されてる。

URLリンク(office.microsoft.com)
Function LenMbcs (ByVal str as String)
  LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function

LenMbcs()は、半角で1、全角で2を返す関数。

691:デフォルトの名無しさん
07/08/23 00:35:39
>>689
失礼しました。
半角数字のみの時です、全角や記号や半角カナは×です。

692:デフォルトの名無しさん
07/08/23 00:50:08
'とりあえず、文字列strが数字かどうか判定する関数。
もっと少ない行数の書き方もあるんだが、あえてわかりやすく書いてみた。

Function IsNumberString(str As String) As Boolean
Dim i As Integer
Dim c As String
Const Number = "0123456789"

For i = 1 To Len(str)
c = Mid(str, i, 1)
If InStr(1, Number, c, vbBinaryCompare) > 0 Then
'c が数字だったので何もしない
Else
'c が数字ではなかった
IsNumberString = False
Exit Function
End If
Next i
IsNumberString = True
End Function


693:デフォルトの名無しさん
07/08/23 00:57:23
'strの中にある半角スペースを探して、
'その手前までをコピーする関数。

Function LeftEx(str As String) As String
Dim i As Integer
i = InStr(1, str, " ", vbBinaryCompare)
LeftEx = Left(str, i - 1)
End Function


694:デフォルトの名無しさん
07/08/23 21:25:50
今週からエクセルを使う仕事に就いて昨日マクロにはじめて触れた
初心者で申し訳ないのですが

ワークシートが2~32まであり
各ワークシートのたとえばB5に以下のように入力したいのですが

ワークシート2のB5に2007/8/1
ワークシート3のB5に2007/8/2

ワークシート32のB5に2007/8/31



For sht = 2 To 32
Worksheets(sht).Select
Range("B5").Select
ActiveCell.FormulaR1C1 = "8/1/2007" + (sht-2)
Next sht
End Sub

これでは当然駄目でした。
今週末になれば自分で勉強しますが
できれば明日使いたいので
よろしければ教えてくださいませ何卒

695:デフォルトの名無しさん
07/08/23 22:03:21

俺の都合に合わせて、即答しやがれ糞共!!

ってわけですか
まぁそういうこと言う奴でも、こういう簡単な質問は
答えたくてウズウズしてる教えたがり厨が答えてくれるだろうけどw

696:デフォルトの名無しさん
07/08/23 22:08:02
Microsoft Access VBAの質問もここでおk?
Accessのスレないんだものorz

697:657
07/08/23 22:45:14
>>675
失礼しました。

698:デフォルトの名無しさん
07/08/23 22:45:18
>>696
moug に逝った方がいいんじゃね?

699:デフォルトの名無しさん
07/08/23 23:46:18
質問させてください。
VBA使って簡単な画像処理をしたいのですが、
画像の輝度値を求める関数って無いのでしょうか?
よろしくお願いします。

700:デフォルトの名無しさん
07/08/24 00:31:35
>>695
わざわざ質問スレに出張ってきて

こんな簡単な質問答えるやつは、
教えたがり厨だ!!

ってわけですか?


701:デフォルトの名無しさん
07/08/24 01:08:05
>>694
未テストだがこんな感じ

Public Sub SheetLoop()
Dim wksSheet As Worksheet
Dim dtDate As Date
Dim intOffset As Integer
Dim strbuf As String

dtDate = "2007/08/01"
For Each wksSheet In ThisWorkbook.Worksheets
strbuf = wksSheet.Name
If 2 <= CInt(strbuf) And CInt(strbuf) <= 32 Then
wksSheet.Cells(5.2).Value = Format$(dtDate + intOffset, "yyyy/mm/dd")
intOffset = intOffset + 1
End If
Next
Set wksSheet = Nothing
End Sub


702:デフォルトの名無しさん
07/08/24 01:24:03
>>701の注意点

シートの名称がイマイチ意味不明なのでとりあえずcintしたが、
これがSheet1とかのパターンが出てくると間違いなくエラーになるので、
isnumericで事前に回避するか、Sheet1系統でOKの場合は
"Sheet"&カウントで文字列連結してstrcompで見てやる必要がある。

今後の注意点
・1文字変数は使わない
・Activate,Select系は使わずオブジェクト経由でアクセスすること
・A1形式は極力使わない
・上記に伴いRangeを使う場面ではCellsで展開してから使用する
・セルに入れる値が日付や文字列や数値など、フォーマットが決まっている場合は
表示形式をNumberformatなどで事前に指定してやる

703:デフォルトの名無しさん
07/08/24 01:32:20
>>702
これって2月とかエラーにならね?
普通にDateAdd使えば?

704:703
07/08/24 01:33:57
うっは流し読みしすぎた

>dtDate = "2007/08/01"

で8月限定にしてんのか。すまん

705:デフォルトの名無しさん
07/08/24 02:46:23
X軸の数値 Y軸の数値
0 -1.5e-9
10 2.5e-8
20 4e-8
30 5e-7
40 6e-5
50 9e-3

のようなデータををX軸は普通、Y軸を対数にしてグラフ化しようとすると、
負の数を入力しようとしています。対数には負の数が入りませんとかエラーが
出ます。(それは当然分かります)
強行すると、この場合、X軸が0の場合を除いてグラフにしてくれます。

動作としてはそれで問題ないのですが、大量にグラフを作成しようとすると、
毎回エラーが出てうざったいのです。なんとかエラーメッセージを消去
して出なくしたいのですが、いい方法はないでしょうか。


706:デフォルトの名無しさん
07/08/24 02:53:19
>>705
事前に負の値を取り除く。

707:705
07/08/24 03:00:08
>>706
やはり、そういう感じでやるしかないのですか・・・
今はABSで絶対値にして逃げてるのですが。

708:デフォルトの名無しさん
07/08/24 05:38:20
そもそも負の値をとりうるデータを対数変換するってデータ処理としてどうよ?

709:デフォルトの名無しさん
07/08/24 07:38:02
>>707
それはおかしいだろう。対数を取りたいってことは負値はIllegalなんでないの?
或いは全体にオフセットを足すべきだったりはしない?

710:デフォルトの名無しさん
07/08/24 11:13:05
EXCEL VBAでフォームを使用して、ユーザーに
ファイルを選択してもらう仕組みを作りたいんですが可能でしょうか?

「参照」ボタンを用意して、ユーザーがクリックすると
フォルダ内のファイルが一覧表示されて、指定できるようなイメージです。

711:デフォルトの名無しさん
07/08/24 12:05:25
出来ますよ

必要なコントロールを配置して
> 「参照」ボタンを用意して、ユーザーがクリックすると
> フォルダ内のファイルが一覧表示されて、指定できる
をコードにすれば良いだけです

712:デフォルトの名無しさん
07/08/24 12:06:32
>>710
Dialogsオブジェクト

713:710
07/08/24 13:12:05
>>711,712
ありがとうございました!
ちょっと調べてみます!!


714:デフォルトの名無しさん
07/08/24 22:40:24
"俺の関数"というファイルにあるテーブルをVlookupした値を加工するユーザー定義関数を、"俺の関数.xla"の標準モジュールに作成しました。
他のファイルから"俺の関数"アドインを有効にしてみましたが、利用できません。どうすればいいですか?

Public Function 俺の関数(key)
fjFilename = "D:\Settings\俺\Application Data\Microsoft\AddIns\俺の関数.xla"
俺の関数 = WorksheetFunction.VLookup(key, Workbooks(fjFilename).Range("テーブル"), 2, 0)+1+2+3
End Function



715:デフォルトの名無しさん
07/08/25 10:10:50
>>710
Application.GetOpenFilename


716:デフォルトの名無しさん
07/08/26 09:28:40
URLリンク(sv2.st-kamomo.com)

競馬の出走馬が並んだデータなのですが
これをレースごとに他のシートにコピペすることはVBAで可能でしょうか?

ちなみにレース場所は毎回異なります。

717:デフォルトの名無しさん
07/08/26 09:33:42
可能

718:デフォルトの名無しさん
07/08/26 09:34:33
>>717
可能だとするとどう命令すべきでしょうか?

719:デフォルトの名無しさん
07/08/26 09:41:35
>>718
「やれ!」

720:デフォルトの名無しさん
07/08/26 09:47:09
(・c_・` )ソッカー

721:716
07/08/26 11:23:09
マクロではできましたが今週の競馬開催の場所が毎回変わりますから
そこができないですね・・・


722:デフォルトの名無しさん
07/08/26 11:50:17
出来るけど、何か?
君が出来ないなら努力不足

723:デフォルトの名無しさん
07/08/26 11:54:41
>これをレースごとに他のシートにコピペすることはVBAで可能でしょうか?



これをレースごとに他のシートにコピペすることはVBAで可能ですが、
どうやったらいいでしょうか?


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