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


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

●EXCEL・VBA質問スレ Part2●



1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

前スレ
pc11.2ch.net/test/read.cgi/tech/1168308855/

375 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 13:22:36 ]
>>374
Intersect(範囲A,範囲B)

376 名前:374 mailto:sage [2007/07/12(木) 13:38:04 ]
>>375
おぉありがとん(`・ω・´)

377 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:58:16 ]
>>373
遅ればせながらレスありがd(・∀・)
なんか、GetSaveAsFileNameっていうまんま直球どストレートな
メソッド発見しますた〜お騒がせしました〜

378 名前:デフォルトの名無しさん [2007/07/12(木) 23:35:57 ]
Sub Bound()
ActiveSheet.UsedRange.Clear
Columns("A:AO").ColumnWidth = 2

n = 1
Range("A1").Select
Do While IsEmpty(ActiveCell.Offset(n, 0))
x = ActiveCell.Offset(n, 0).Row
If x < 2 Or 30 < x Then n = -n
For chien = 1 To 30
ActiveCell = ""
ActiveCell.Offset(n, 0) = "○"
Next chien
ActiveCell.Offset(n, 0).Activate
Loop
End Sub

上下運動を2回繰り返して止めるにはどうしたらよいでしょうか?
ご教授願います。

379 名前:デフォルトの名無しさん [2007/07/13(金) 00:11:06 ]
exit do

380 名前:デフォルトの名無しさん [2007/07/13(金) 00:36:18 ]
378です。
どういう風に入れたら良いでしょうか?
すみません、宜しくお願いいたします。

381 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 02:19:26 ]
>>378
なにげに試したら楽しくなってきたので俺も適当に作ってみた

'API
Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long)

Const UpperBound As Long = 2 '1以下はエラー
Const LowerBound As Long = 30
Const SleepTime As Long = 50
Const ico As String = "○" 'バウンドさせる文字
Const Col As Long = 1 '列(この辺は定数にしない方が斜めとかいけるから指定しない方が良さげ)

Private Sub Down(ByVal Speed As Long)
Dim r As Long
For r = UpperBound To LowerBound
Cells(r - 1, Col) = ""
Cells(r, Col) = ico
DoEvents
Sleep SleepTime + Speed
Next
End Sub


Private Sub Up(ByVal Speed As Long)
Dim r As Long
For r = LowerBound To UpperBound Step -1
Cells(r + 1, 1) = ""
Cells(r, Col) = ico
DoEvents
Sleep SleepTime + Speed
Next
End Sub

382 名前:381の続き mailto:sage [2007/07/13(金) 02:33:11 ]
Private Sub bound2()
Dim BoundCount As Long
For BoundCount = 1 To 10
Down -(BoundCount * 4)
'Downで表示されっばなのを削除
Cells(LowerBound, Col) = ""
Up -(BoundCount * 4)
'Downで表示されっばなのを削除
Cells(UpperBound, Col) = ""
Next
End Sub

updownの引数で加速と減速可能にっ!
この調子でいけばブロック崩しとかできんのかね?


で、378の質問に全く答えない俺w
なんてのは可愛そうなんで、
>>380
上下した時に「1回上下したとカウント」して
カウントが2になったらExit Doすればok
どこで1回上下したかを判断する場所は
自分でコード組んだならわかるっしょ?



383 名前:デフォルトの名無しさん [2007/07/13(金) 09:46:41 ]
>>381さん・・・
>378です。

学校の課題で・・・
for nextを使用して動いたマス目で2回動いた事にしていたのですが、
それでは不十分と言う事で・・・(TT)

試行錯誤して早7日目・・・
どうしようもなく、皆様にお知恵を拝借しようとした次第です。

宜しければ教えて下さいませ。





384 名前:デフォルトの名無しさん [2007/07/13(金) 10:30:54 ]
不十分の意味がわからない、どうしたいんだ

385 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 11:28:40 ]
>>383
>If x < 2 Or 30 < x Then n = -n
反転の判定をしている、ここで処理してもらいたかったんじゃないのか?

386 名前:384 [2007/07/13(金) 14:36:56 ]
俺は>>381じゃないが、そういうことならこれで
If x < 2 Or 30 < x Then n = -n: i = i + 1
If i > 3 Then Exit Do

387 名前:デフォルトの名無しさん [2007/07/13(金) 20:01:34 ]
会社での昼休み、
ウイルスバスターが動いててすごく重いけど、
どうしても直したいマクロがあって、開いていじってた。

PCがフリーズした。

PCの電源を切って再起動したら、マクロもろともExcelファイルが破損してた。
「アプリケーションの回復」でも回復できない、深刻な破損との事。修復不可能。
こういう時に限ってバックアップとってない。
マクロもエクスポートしてない。
仕方ないので、いちから作り直した。

バックアップは、きちんと取りましょうという教訓でした…

388 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 21:53:28 ]
教訓というか初心者以外では常識だよね
というか、うちでは世代別バックアップを取るマクロをExcel起動と同時に自動で回しっぱなし
\backup\yyyy_mm_dd\FileName\[yyyy_mm_dd-hh_mm__ss]FileName.xls
にバックアップが自動保存され、前日以前の物があれば日付単位で個別圧縮(cab)して
退避ディレクトリにコピー、更に1週間以上前の物は退避ディレクトリの書庫は残して
バックアップディレクトリのファイルは削除
ここまでは自動で、退避ディレクトリの書庫を定期的にメディアに焼くのだけは手動

まあメディアに焼いたところで、トラブル時もHDD上の1週間分だけで復旧は事足りることがほとんどだけどね


389 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 21:55:37 ]
FolderShareをつかって他のパソコンと同期させておくだけでも最低限のバックアップにはなると思う。

390 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 22:24:26 ]
俺はソフトで差分バックアップしてる
重要なデータExcelだけじゃないし楽だし早い

391 名前:デフォルトの名無しさん [2007/07/13(金) 23:27:17 ]
>>381さん
>>386さん

>378です。

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

有難うございました!


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

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



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

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


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

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

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

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

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

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

400 名前:デフォルトの名無しさん mailto:sage [2007/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 mailto:sage [2007/07/17(火) 10:40:03 ]
>>400
それのどこがVBAの質問なのかと。basicの基本以下のレベルジャマイカ。

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

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



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

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

405 名前:400 mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 09:54:41 ]
>>405
どう見てもこの後ループを纏めることになるので、先回りしておけ。

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

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

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


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

411 名前:408 mailto:sage [2007/07/18(水) 14:12:48 ]
>>409
難しくて私には分かりません

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

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


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

413 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 16:03:15 ]
>>412
どうやら無理そうですね

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



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

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

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

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

ttp://oshiete1.goo.ne.jp/qa373903.html

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

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

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

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

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

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

419 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 22:11:08 ]
>>417
> この方法では嫌なんだとさ。

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

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

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

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

421 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 00:37:15 ]
VBならできるけどVBAは駄目です

422 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 11:03:09 ]
そんなことはない

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

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



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

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

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

427 名前:デフォルトの名無しさん [2007/07/19(木) 23:29:02 ]
ByVal?

428 名前:デフォルトの名無しさん [2007/07/19(木) 23:29:40 ]
ごめんちがた

429 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:00:33 ]
>>426
普通にできるだろ

430 名前:426 mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 mailto:sage [2007/07/20(金) 00:45:38 ]
>431氏の通りにしたらできました。
式にしないと駄目ということなんですかね。


433 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:46:22 ]
func1 tmp



434 名前:429 mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 01:12:19 ]
回答ありがとうございます。
VB独特の仕様なんで覚えるしかないみたいですね。
また間違えそう・・・



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

437 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 06:55:09 ]
つまり、外せる括弧は外せと言うことだな。

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

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

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

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

442 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 02:44:42 ]
>>441
Win32APIのSleep使えばいいだけだよ
_秒指定なので、コンマ1秒なら100_秒指定で

443 名前:441 mailto:sage [2007/07/22(日) 07:24:57 ]
解決しました。ありがとうございます。



444 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 12:21:00 ]
444

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

446 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 16:50:00 ]
そんな関数あるのか?

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

DataAdd ×
DateAdd ○

こういうこった

448 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 17:10:15 ]
教えて下さい。

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

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

450 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 19:12:45 ]
>>450
ここはVBAでやりたい人の為のスレだよ
まあExcelの本スレにも書かれている通り、関数では値の書き換えは出来ないので
どっちにしろVBAでやるしかないけどね

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

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



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

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


456 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 22:49:33 ]
kill

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

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

458 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:53:34 ]
そのフォームをいい時と悪いときでエクスポートして比べてみたらいいんじゃ

460 名前:458 [2007/07/24(火) 00:24:55 ]
エクスポートして比べてみたけど、同じでした。。

461 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 07:16:30 ]
最小限の再現出来るソースを出せ

462 名前:デフォルトの名無しさん mailto:sage [2007/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続き mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 mailto:sage [2007/07/26(木) 08:31:02 ]
追記です。
出勤する人が1人の場合は、
必ず勤務は朝からになります。(勤務表には0が入ります。)


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

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

468 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 01:39:11 ]
>>467
キミが痴呆になるまで

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

470 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/07/28(土) 19:53:23 ]
>>471
速攻レスありがとうございます。
今仕事中でこっそり送信してるんで、時間ができたらやってみたいと思います。


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

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

チラ裏スマソ。



474 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:25:55 ]
>>471

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



For j = 1 To 23 Step 2


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

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

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






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

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

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