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


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

Excel VBA質問スレ Part8



1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ]
ExcelのVBAに関する質問スレです

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

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
   
 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。 
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

565 名前:547 mailto:sage [2008/10/18(土) 04:21:40 ]
>>563
もう一度考えてみました。

やりたいことと、セルの値
購入日   保証年数
2006/10/05  2 ←保証切れ(青色になって欲しい)
2004/08/12  5 ←保証が切れていない(色は黒色に)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then
If DateAdd("d", Target.Cells.Offset(0, 1).Value * 365, Date) < Date Then
  ' 今日の日付に、Target.Cellsの右に入っている年数×365日を足して、今日の日付と比較

Target.EntireRow.Font.ColorIndex = 5 '青
Else
Target.EntireRow.Font.ColorIndex = 0 '黒
End If

End If
End Sub

日付を入れると「全部青になってしまいます」
ちなみに
If DateAdd("y", Target.Cells.Offset(0, 1).Value, Date) > Date Then
と年数バージョンでもやってみましたが、同じ結果orzでした。

全然わかりません、足して日付が今日より前なら「保証切れ=青色」にしたいのですが・・。
日付と日付を比較できていないのでしょうか?単位が違う状態で比較しているのでしょうか?

566 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 05:47:32 ]
>>565
おいおいw、悩み過ぎてわけわかんなくなったのか?ガンガレ
今日の日付に足したら、何足したって未来になるだろw

>>562のでほぼ合ってるんだよ
オレのヘルプには "y" じゃなくて "yyyy" ってのがあるんだが、
おまいのにはないのか?

567 名前:565 mailto:sage [2008/10/18(土) 06:29:37 ]
ありがとうございます。
yyyyでしたか・・・、さっそく書き換えるといけました!感動しました。
たしかにadddateで今ヘルプを見ると、

設定値 内容
yyyy yyyy
y 年間通算日

yyyy・・・内容書いていませんwww (by Office 2003)
でもyは、その年から何日後という意味なんですね、こんなの思いもよらなかったです。


しかし、大問題が発生しました。
xlsファイルを「開いたときに今日の日付を比較しないといけない」ので、
worksheet_changeじゃだめなんです。

workbookが開いたとき、な方法があればいいのですが、
worksheet_activate、selectionchangeでも反応しませんでした。

Private Sub Worksheet_Change(ByVal Target As Range)
ここをどのように書き換えれば、読み込み時に再判定してくれるのでしょうか?

568 名前:565 mailto:sage [2008/10/18(土) 06:53:58 ]
何度もすいません、
たぶん、worksheet_activateイベントで良いと思うのですが、

activateになった時に計算させるということは、
自動的に

Private Sub Worksheet_Activate(ByVal Target As Range)

If Target.Column = 1 Then
If DateAdd("yyyy", Target.Cells.Offset(0, 1).Value, Target.Cells.Value) < Date Then
Target.EntireRow.Font.ColorIndex = 5 '青
Else
Target.EntireRow.Font.ColorIndex = 0 '黒
End If
End If
End Sub

Private Sub部分を変えただけだと
違うシートを選んで、選択し直すと

「コンパイルエラー プロシージャの宣言がイベントまたはプロシージャの宣言と一致していません」
と出ますが、すでに上の言葉が理解できません。
if文以下も変更しなければならないのでしょうか?

byヘルプ
プロシージャの名前はイベントと同じ名前ですが、パラメータの数と型が一致しません。
イベント プロシージャに新しくパラメータを追加したときなどに、このエラーが発生します。
たとえば、フォームの Form_Load イベント プロシージャを次のように変更すると、このエラーが発生します。

ダメです、わけわかりませんorz

569 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 08:23:40 ]
>>567-568
> yyyy yyyy
ちょwマジでw
おちおち「ヘルプ読め」とも言えんじゃないか
まあそっちは解決したようで良かった

イベント変更の方だが、worksheet_activateは引数を取らないから、
そうなるのは当然だな
引数を消して、targetを自前で指定してやればOK

つか、workbook_openイベントもあるんだが
つか、今さらだけど、
色変えたいだけなら条件付き書式でもできるがw

570 名前:デフォルトの名無しさん [2008/10/19(日) 02:32:28 ]
VBAにEffective C++やEffective Javaみたいなガイドラインってある?

571 名前:568 mailto:sage [2008/10/19(日) 02:58:41 ]
>>569
>色変えたいだけなら条件付き書式でもできるがw

こ、こんなのあったんですか・・。
春先ぐらいから悩んでいたのが、一撃で吹っ飛びました。

わざわざVBAを使う必要無かったんだ・・・。
___________
   ||     
   ||     ⊂⊃
   ||    ∧ ∧
   ||    (  ⌒ ヽ でも勉強にナターヨ・・・
 ∧||∧   ∪  ノ
(  ⌒ ヽ 彡  V
 ∪  ノ  フワーリ
  ∪∪

572 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 03:29:41 ]
ほんとに色変えるだけなのかよwまいったw

>>559もそうだし、こういう奴、実は多いのか?
何という時間の無駄

573 名前:デフォルトの名無しさん [2008/10/19(日) 07:09:25 ]
悪いけど笑わせてもらう


  ァ   ∧_∧ ァ,、
 ,、'` 。゚( ゚^∀^゚)゚。,、'`
  '`   ( ⊃ ⊂)  '`






574 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 07:12:51 ]
関数でできることをマクロでやろうとしたり、案外よくあるよな

575 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 12:16:55 ]
だんだんとワークシート関数がウザくなってくるんだよなw


576 名前:デフォルトの名無しさん [2008/10/19(日) 17:15:03 ]
暇だから何か問題だしやが……出して下さい

577 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:25:44 ]
>576
Excel総合相談所74で質問が出てますよ。(レス番号325です)

578 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 20:49:32 ]
プログラミング初心者かつエクセルにも詳しくない奴が、
この手ので延々悩むんよね
心理的ハードルを超えさせる書式の魔力おそるべし

579 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 21:31:47 ]
>>576
4色問題お願いします。

580 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:29:21 ]
>>577
ありがと
解決済みだった

>>579
全ての図形が4色で塗り分けられるとかなんとかだよね
図形の形とか定義あるのかな?

セルに色塗るなら二色で出来ちゃうし

581 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:33:43 ]
二次元配列に書き出したセル範囲のデータををリストないしはコンボボックスに
格納したいんですが、ワークシートに書き出さずに直接入れる方法はありますでしょうか?

582 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:43:16 ]
>>581
あります

入力規則のリストなら、マクロの記録録ればわかります
コントロールオブジェクトのコンボボックスの方はVBAヘルプに載ってます
但しフォームツールのコンボボックスなら多分セル書き出し必須

583 名前:581 mailto:sage [2008/10/19(日) 22:50:06 ]
>>582
すみませんコントロールツールボックスの方です
シートに書き出せばRowSourceプロパティで簡単なのは存じてますが…




584 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 22:51:02 ]
>>580
4色問題ってこんな感じのです。
ttp://yougo.ascii.jp/caltar/4%E8%89%B2%E5%95%8F%E9%A1%8C

585 名前:デフォルトの名無しさん [2008/10/19(日) 22:59:02 ]
>>584
ありがとう

1.A1からランダムにIDつけて、同ID隣り合わせを領域と見なす

2.領域ごとに、隣り合わせ同色にならないように色IDを付ける

3.色IDが1から4で収まっているか判定


っていうアプローチでよいかなあ
アルゴリズムの問題っぽいがw

586 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:36:57 ]
セルに依存しない計算は速いのですが結果をセルに
出力するのに時間がかかります。たとえば

Dim X(10000, 10) As Double
Dim I As Integer
Dim J As Integer

'計算
For I = 1 To 10000
For J = 1 To 10
X(I, J) = Sqr(I) * Sqr(J)
Next J
Next I

' 出力
For I = 1 To 10000
For J = 1 To 10
Cells(I, J) = X(I, J)
Next J
Next I

で出力の所要時間を計算時間と同程度にすることができるような
出力の書き方があれば教えてください。


587 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:51:32 ]
For I = 1 To 10000
For J = 1 To 10
Cells(I, J) = Sqr(I) * Sqr(J)
Next J
Next I

588 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:51:40 ]
ちらつき抑制でよいかな?

forの前に

Application.ScreenUpdating = False

を入れると、シートの描画しないから早くなる
少しずつ描画見たいなら、例えばNextの間に
Application.ScreenUpdating = Tlue
Application.ScreenUpdating = False
を追加すると、Iが一つ進むごとに描画される

例えばIが100ごとに実行したいなら

J Mod 100 使ったりできる

589 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 23:54:01 ]
つーか、配列を0始まりではなく1始まりにしてそのまま書き出したらいいやん

590 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:20:55 ]
>588
21秒から13秒に8秒も短縮できました。ありがとうございます。

>589
具体的に「そのまま書き出す」ってどうすればいいんですか?
よろしくお願いします。


591 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:29:07 ]
>>590
>>589じゃないけど、
range(cells(1,1),(cells(10000,10)) = X

592 名前:591 mailto:sage [2008/10/20(月) 00:30:17 ]
タイプミス
range(cells(1,1),cells(10000,10)) = X

593 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:36:38 ]
base 1 にするのはお勧めできない。
変数に+1しる。




594 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:41:35 ]
592>>

やってみました。1秒かからないんですね!ありがとうございました。


595 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:42:22 ]
base 1 にするのはお勧めできないが
変数に+1するのもお勧めできない
X(1 To 10000,1 To 10)にしる

596 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:49:07 ]
すみません
Range(Cells(1, 1), Cells(1000, 10)) = X(1 To 10000,1 To 10)
とするとコンパイルエラーがでるんですが・・・。

597 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:52:29 ]
>>596
違う違うw
1 to 10000 とかを書くのは dim のとこ

598 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 00:56:26 ]

Dim X(1 To 10000, 1 To 10) As Double
でしたね。失礼しました。
みなさんどうもありがとうございました。

599 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 02:02:50 ]
EXCEL XP, 2000, 2003, 2007において、
VBAはクアッドコアに対応しているの?

コア4つのVBAはやはり処理が早いんだろうか・・。

600 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 04:35:01 ]
>>582
余談だけどフォームの方もできる

601 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 06:43:22 ]
すみません
文字列の入ったセルをselectした際に、単にselectにするだけではなく、
編集中の状態にまでもっていきたいのですが、
そのような方法を御存じないでしょうか。
select後、sendkeys"{F2}"で実現できるのですが、
Sendkeysを使用しない方法を探しています。どうか宜しくお願いします。

602 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 08:24:46 ]
数式バーで編集じゃだめなの?

603 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:42:57 ]
Excel2003でSheet1のセルA1に日付を入れる(08/10/01)とSheet2以降のセルA1に次の日付になるように反映させるにはどうしたらいいですか?



604 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:52:14 ]
>>603
Sheet2以降のセルA1に、「=Sheet1!A1」と入力。

605 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 13:54:49 ]
+1忘れた

606 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 14:05:48 ]
>>604
d

607 名前:デフォルトの名無しさん [2008/10/20(月) 16:56:04 ]
どこがVBAやねん

608 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:13:53 ]
春から悩んでたかも知れないじゃないか

609 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:11:15 ]
>>599
まず、複数スレッドを作ることが実質的に無理だ。
Excel自体も、2007から再計算を複数スレッドで行えるようになったくらい。

610 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 20:17:31 ]
依存関係ありまくりの計算だからなあ。

611 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:00:07 ]
オートフィルターがオンになっているシートの選択行について、ソートと処理を
行った後、再度元の並びに戻す方法を模索中です。

1)選択行範囲の最後(列n)に式["=ROW()"]を設定
2)列nの式を値に変更(コピぺ)
*ソートと処理を行う
4)列nで昇順にソートした後、列nを削除

この方法だと選択範囲内に不可視のデータが存在すると、[2)]でコピーと貼付け
の領域が違うため貼付けエラーになります。

1行ずつ行番号をセットする方法は件数が多いと時間が掛かる為オートフィルター
情報を取得しておき、一旦オートフィルターオフにしてからコピペしています。
他にもっと良い方法をご存知でしたら御教授願います。

選択データを他ワークシートにコピーして処理する方法が一番良い気もしますが
データ量が三万件とかだとコピーにも多少時間が掛かるので...

612 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:29:28 ]
>>611
仮に、"=row()" を入れた範囲を range("G5:G10") として、
G列を非表示にして、
range("G5:G10").value = range("G5:G10").value
ってのはダメ?

613 名前:611 mailto:sage [2008/10/21(火) 18:27:03 ]
>>612
助かりました、有難うございます。orz

だけど、非表示だと何故上手くいくのでしょう?



614 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:33:32 ]
どこがVBAの問題なのか春先まで悩みそうだ

615 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:41:59 ]
>>613
わからん。なんかやってみたらできた
仕様なのかバグなのかも知らんw

616 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 21:01:59 ]
非表示だと pastespecial もうまくいくな
どうやら仕様くさい

617 名前:VBAの初心者 mailto:sage [2008/10/21(火) 21:24:20 ]
初めまして。自分は知り合いにVBAを教えて貰っているんですが、相手に人はPCが
無くよく分らなくてもし良かったら教えて下さい。

だだ走らせるだけの凄い簡単なプログラムらしいんですが私には走らせ方が分らな
くて困ってます。

10 for m=1 to12
20 print m
30 next m
40 stop
なんですが凄い初心者なのでエクセル開いた所から分らなくて教えて下さい。


618 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 21:27:30 ]
それはVBAじゃない。VBでもない太古のBASICのプログラム。

619 名前:VBAの初心者 mailto:sage [2008/10/21(火) 21:30:01 ]
らしいです。VBAを覚えたいなぁ〜って言ったら色々言われて私が全然分からなく
なってしまったので、まず見れる簡単なの教えてと頼んだんですが、今のじゃ無理
なんでしょうか;

620 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 21:50:26 ]
もしかしたら、その相手の人は(Excel) VBAを知らないという可能性も考えられる。

VBAも含めてナントカBasicってのは山ほどあるけど、どれも全く別物。
敢えて共通点をあげるとしたら名前にBasicが付いていることだけ、というのはさすがに言い過ぎだけど。

そして、お前は何をやりたいのか。Excel VBAで間違いないんだよな?

621 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 22:39:24 ]
釣られすぎ

622 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 23:24:21 ]
縦読みじゃないのね。

623 名前:デフォルトの名無しさん [2008/10/22(水) 07:27:31 ]
Interiorってクラス名としてはどうなんですか?



624 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 10:00:18 ]
激しく紛らわしいからやめた方が良いかと

625 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:27:13 ]
自作クラスのインスタンス380個ぐらい作ったらメモリ不足になった

626 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:16:21 ]
そりゃクラスの内容に因るだろうな
個数や上限決めておらず、必要に応じて作る場合とか
1万や2万は当たり前に使ってることあるが
ちゃんと配慮してれば全然問題ない

627 名前:デフォルトの名無しさん [2008/10/24(金) 11:20:18 ]
選択アドレスから重複を削除する方法はありますでしょうか?

例えば、選択したアドレスが[$A$2:$A$5,$A$5:$A$10]の場合、そのアドレス
範囲で集計(Subtotal)するとA5が重複して集計されてしまいます。

Excelのステータスバー(右側)には重複を除いた合計値が表示されます。
これと同様の値(特定の1列のみ)をVBAで取得したいのです。


628 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:06:03 ]
>>627
unionしちゃばOK

629 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:09:11 ]
>>627
Sub test1()
 Dim rg1 As Range, rg2 As Range
 For Each rg1 In Selection.Areas
  If rg2 Is Nothing Then
   Set rg2 = rg1
  Else
   Set rg2 = Range(rg2, rg1)
  End If
 Next rg1
 Debug.Print WorksheetFunction.Sum(rg2)
End Sub

>>628
Unionは無理じゃない?

630 名前:629 mailto:sage [2008/10/24(金) 12:20:32 ]
今テストしてたんだが離れたセルを選択した時に期待どおりの動きしないな・・・

631 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:22:27 ]
>>629
? range("$A$2:$A$5,$A$5:$A$10").cells.count
10
? union(range("$A$2:$A$5"),range("$A$5:$A$10")).cells.count
9
? union(range("$A$2:$A$5"),range("$A$5:$A$10")).address
$A$2:$A$10

「特定の1列のみ」だそうだからOKかなと

632 名前:629 mailto:sage [2008/10/24(金) 12:29:12 ]
RangeをUnionに書き換えたらいけたような気がするw

633 名前:デフォルトの名無しさん [2008/10/24(金) 14:52:48 ]
有難うございます。
Set rg2 = Union(rg2, rg1)
に変更したら上手くいきました。

もう1つ教えて下さい。
選択された範囲の行を対象に特定の列(例では8列目)を以下の様に集計して
いますが、選択範囲から集計範囲(特定列)への変換にもっと簡単なやり方が
ありますでしょうか?

Dim vals As Variant, i As Integer, c As Integer, addr As String
c = 8
vals = Split(Selection.Address, ",")
For i = 0 To UBound(vals)
With Range(vals(i))
vals(i) = Range(Cells(.Row, c), Cells(.Row + .Rows.Count - 1, c)).Address
End With
Next
addr = Join(vals, ",")
Debug.Print WorksheetFunction.Subtotal(9, Range(addr))




634 名前:633 mailto:sage [2008/10/24(金) 16:24:56 ]
列の特定と同時に重複を削除しないと駄目のようです。
>>629さんの方法に組み込むと良い様に思います。

Set r1 = Cells(rg1.Row, 8)
Set r2 = Cells(rg1.Row + rg1.Rows.Count - 1, 8)
If rg2 Is Nothing Then
Set rg2 = Range(r1, r2)
Else
Set rg2 = Union(rg2, Range(r1, r2))
End If


635 名前:デフォルトの名無しさん [2008/10/24(金) 16:33:53 ]
質問です。
エクセルで資料を作ったがMacroで両面コピーの方法が分からないので両面コピーの方法を教えて下さい。

636 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 19:46:01 ]
質問です
訳あって欧文(ウムラウトを含むラテン文字の文章)の書き込まれたExcelシートから
内容を読み出してテキストファイルに起こしたいのですが、
Cells(?,?).valueやCells(?,?).TextからStringsの変数に読み出した時点でウムラウトが飛んで
近しい形状の通常のアルファベットに置き換えられてしまうようです。

結構ぐぐって見たのですが、読み出せなくて困った的な話はいくつか見つけたのですが
対処法について言及しているページが無かったので、皆さんのお知恵をお借りできないかと
思って書き込みさせていただきました。
なにかお知恵などありましたらよろしくお願いいたします<(__)>

637 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:14:02 ]
>>635
何を何処へコピーするのか

638 名前:デフォルトの名無しさん [2008/10/24(金) 20:26:20 ]
両面コピーって両面印刷の事?プリンタの話になるんじゃないの?

639 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:33:08 ]
>636
元となるExcelファイルは、Excelのどのバージョンで作られたものですか?
あるいは、どこの国用のExcelで作られたものでしょうか?
VBAを利用せず、直接シートの必要な範囲をコピーしてエディタへ(ウムラウトは消えずに)
ペーストすることはできたのでしょうか?

↓このサイトは見ましたか?
www.microsoft.com/japan/office/ork/three/intd02.mspx
Office XP リソース キット / 国際環境での導入計画 / 国際環境でのメンテナンス
Unicode サポートの活用
「多国語テキストのコピー」の項と、「VBA で Unicode 値を使用する」の項が参考になるかも。

640 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:48:44 ]
あるサブルーチンをForループで回すと100回くらいなら一瞬で終わるんですが、
500回とかそれ以上になるとなぜか無限ループにでも入ったみたいに計算が終わってくれません。
オーバーフローのエラーメッセージが出ることもないし、実際オーバーフローするほど大きな数を扱っているわけでもない。
原因としてはどんなことが考えられるでしょうか?

641 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:53:05 ]
サブルーチンのforカウント変数をステータスバーにでも表示してデバッグのヒントにするのだ。
その情報だけだと、メモリかCPU?としか言えない。

642 名前:デフォルトの名無しさん [2008/10/24(金) 21:55:54 ]
>>635

sub 裏表印刷()

印刷実行

Msgbox ゛用紙裏面をセットしてください゛

印刷実行

end sub

643 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:56:08 ]
>>641
メモリっぽいですね。ちょっと調べてみます。
ありがとうございました。



644 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:09:55 ]
>>640
DoEvents
homepage2.nifty.com/kasayan/vba/doevents.htm

645 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:45:40 ]
636です

>>639
動作環境を書くのをすっかり失念してました
この手の質問には必須なのに…申し訳ありません

OSはXP日本語版でExcelは日本語版Office2000に含まれるものです。
現在VBA開発に使用しているxlsファイルは
Exciteの機械翻訳で出したものをコピペしてBOOKに張り付けてテストデータとして作成したものです

紹介していただいたリンク先を読むと、VBAではunicodeを標準ではサポートしていないようですね
(VBでは文字列関係の内部処理はUnicodeで処理されてるのに…変な気分…)
まあ、テストデータで使用している文章がUnicodeではなく単純に欧文ASCIIコードの文字列の可能性もあるので
Unicodeをサポートしていればうまく行くとは限らない気もしますが

でもちょっと手がかりをもらえたのでもう少し試行錯誤してみようかと思います。

646 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 07:04:27 ]
オーバーフローの意味もしらないのかVBA厨房は

647 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:29:01 ]
アクセスならともかく、エクセルでプリンタ設定いじるって難しいくね

648 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 14:59:26 ]
>>633
unionでいいんなら

Sub test()
Dim rg1 As Range, c As Integer
c = 8
Set rg1 = Intersect(Union(Selection, Selection).EntireRow, Columns(c))
Debug.Print WorksheetFunction.Subtotal(9, rg1)
End Sub

649 名前:デフォルトの名無しさん [2008/10/25(土) 15:46:42 ]
どなたかお教えください

マクロでたとえばですが

ActiveCell.Replace What:="*", Replacement:="x"

のように セル文字列の * の部分だけをxに変換したいのですが
アスタリスクはすべて変換してしまいますよね。

A1*A1 という文字列を上記マクロ実行するとA1xA1 という結果になって
ほしいのですが。実際は x 担ってしまいます

どのようにすればよいのでしょうか。


650 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:07:52 ]
>>649
ActiveCell.Replace What:="~*", Replacement:="x"

651 名前:デフォルトの名無しさん [2008/10/25(土) 16:09:39 ]
>>650

すごいですね。どうもです

652 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 17:06:03 ]
春先から悩んでた人多いな

653 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:11:57 ]
>>645
参考になるかも
ttp://codezine.jp/article/detail/1718





654 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 19:10:31 ]
しかし、エスケープシーケンスはもっとわかりやすくしてほしいよな。

655 名前:デフォルトの名無しさん [2008/10/26(日) 03:08:58 ]
教えてください
VBAで、明日が三週目の日曜日だった場合A1に○○と表示するってやりたいんでがどうやればいいですか?

656 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:24:14 ]
>>655
明日の日付はDate関数に+1すれば解る
特定の日付が日曜日か否かはWeekday関数で解る
3週目か否かは日を算術演算すれば解る
あとはそれらを条件に条件分岐してA1に値を代入すれば良い

この説明で解らなければ>>1★5なので、さようなら

657 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:44:51 ]
>>656
ありがとうございます。
算出演算ってのがよく解らないですががんばってみます。

658 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 06:05:51 ]
だからエクセルでやれよ

659 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:35:27 ]
だよな。数式でできるレベル

660 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:40:58 ]
 質問です。
 Excel2003を使っています。
 コマンドボックスをクリックするたびに、セルA1の数に1ずつ足していくマクロを作りたいのですが
どなたか教えていただけませんでしょうか。
 よろしくお願いします。


661 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:10:39 ]
ちょっとは自分で調べる努力した?

662 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 15:32:19 ]
>>660
コマンドボックスって何ぞや?

663 名前:660 mailto:sage [2008/10/26(日) 15:45:47 ]
 聞いておいて遅レスごめんなさい。
 コマンドボタンの間違いです。
 色々調べてみたのですが、変数の定義の仕方そのものがよく理解できていなくて

 わからないなりに考えたのが↓です

Sub test_Click()
Dim h As Long
h = Range("A1").Value
If h = 0 Then
h = 1
Else
h = h + 1
End If
End Sub

 もうちょっと頑張ってみます



664 名前:649 [2008/10/26(日) 15:48:36 ]
 お教え願いますか

 '=A1 という文字列を =A1 という数式に変換するマクロありますか。

同かよろしくお願いします。



665 名前:649 [2008/10/26(日) 15:50:36 ]
舌足らずでした

 あるセルに '=A1 という文字が書かれています。
マクロコマンド使って =A1 という数式に置換したいのですが。

どうかよろしくお願いします。









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

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

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