Excel VBA 質問スレ Part24at TECH
Excel VBA 質問スレ Part24 - 暇つぶし2ch2:デフォルトの名無しさん
12/04/13 17:55:43.86
いちおつ
新すれなんで再投下

>>1000
えっ


えっ


*やりたいこと*
シート内のセル設定情報をテキストで保存して、読み出し
→帳票のテキストデータ化

*必要なこと*
セルに設定された各種プロパティの保存

*知りたいこと*
プロパティがデフォルト以外に変更されたセルを発見する方法

*ばーじょん*
xp以降
excel2000以降

3:デフォルトの名無しさん
12/04/13 19:01:32.19
>>2
質問内容がよくわからないけど
デフォルトのセルと比較する以外にないんじゃないの?

4:デフォルトの名無しさん
12/04/13 19:41:46.48
会社でつこてる社内システムのWebなんだけど
30分くらいつこてなかったらログアウトされて
また自分のIDとPWを入力せんとあかんのが非常にうざい。
VBAを使ってこれを防ぐ自動にIDとPWを入力する方法はないですか?
会社PCではソフトインストールはもちろんダウンロードも禁止されてるので
URLに「&xx=xx&xx=xx」を追加する方法とか、htmlファイルを改造するとか、可能な方法で提案をお願い。

5:デフォルトの名無しさん
12/04/13 19:47:32.47
それ、Excelを使ってやることか?

6:デフォルトの名無しさん
12/04/13 19:52:17.44
>>4
>>1の★3以降をよく読め

7:デフォルトの名無しさん
12/04/13 19:54:19.76
Excelとは限らんが?

8:4
12/04/13 20:02:21.28
そんなこと言わずに教えれ

9:デフォルトの名無しさん
12/04/13 20:07:53.65
>>4
コマンド渡してネットアクセス

>>3
やっぱないのかなあ
全セルで全部のプロパティ参照して構造化するのか・・・
読み出し時はセル範囲指定すればまだマシだけど

10:4
12/04/13 20:16:39.59
>>9
なんのコマンド?
ネットアクセスとは?
さっぱりわからん

11:デフォルトの名無しさん
12/04/13 20:22:59.98
>>10
VBAからコマンドプロンプトを経由してネットワークにアクセスできる。
とっても簡単。
ユーザー名、パスワード入れてエクセルからネットワークのパソコンを開けるわけだ。
コマンドプロンプトってのは、キーボードから「コマンド」を打ち込んで操作するソフトな。
例えばIPアドレスを調べたりするときに、ウインドウズのスタートからコマンドプロンプトを起動して、
「ipcomfig」とか入れてやれば出てくる。
ネットワークで繋がってるパソコンにアクセスしたりいたずらしたりできる。








あとはggr

12:4
12/04/13 21:02:46.77
>>11
とても興味があるのですが詳しく教えてくださらんじゃろか?
具体的にはどんな呪文を書けばいいの?
ネットワークとはインターネットのアドレスも含むんですかね?
ないかびっくりすることができそうだけど
具体的に教えてくださらんか?
質問の永久ログインのことに限らずいろいろと。

13:デフォルトの名無しさん
12/04/13 21:13:54.96
かわいいおにゃのこなら・・・

14:デフォルトの名無しさん
12/04/14 00:17:13.56
>>2
いったんxmlで保存して適当にゴニョゴニョすればいいんじゃない

つか俺ならそのままエクセルで保存しとくか、その帳票とやらを作成するのに使った元データ保存しとくが

15:デフォルトの名無しさん
12/04/14 01:53:51.38
フォームコントロールで作ったCheckBoxが6つあって
それが例えば リンゴ・バナナ・ミカン・イチゴ・スイカ・メロンとあったとして、
チェックの入っている項目の1文字目を一つのセルに入力したいです。
(例) リ・ミ・イ
の様に。何かいい方法をご教示下さい。


16:デフォルトの名無しさん
12/04/14 02:47:17.56
>>11
それだと別セッションになるから無理じゃない?

VBAからIEを起動するようにして業務はその起動されたIEでやって
離籍するときはマクロ実行ボタンかなんか作っといてF5アタックを
かけ続けるとかかなあ
URLリンク(billboardtop100.net)

17:デフォルトの名無しさん
12/04/14 03:05:15.99
F5連打するソフトをスクリーンセーバーにすれば

18:デフォルトの名無しさん
12/04/14 11:48:25.82
>>15
Private Sub CommandButton1_Click()
    Dim c As Control
    Dim s As String
    For Each c In UserForm1.Controls
        If TypeName(c) = "CheckBox" Then
            If c.Value Then
                If s <> "" Then
                    s = s & "・"
                End If
                s = s & Left(c.Caption, 1)
            End If
        End If
    Next
    ActiveCell.Value = s
End Sub


19:デフォルトの名無しさん
12/04/14 12:15:27.58
セルの入力した数式がどのようなタイミングで実行されるのかがわかりません。
VBA実行する前後で数式が実行されるのでしょうか?



20:デフォルトの名無しさん
12/04/14 12:26:02.17
>>19
ワークシートの数式は入力した瞬間に実行される

21:デフォルトの名無しさん
12/04/14 12:59:51.05
>>19
URLリンク(support.microsoft.com)

22:デフォルトの名無しさん
12/04/14 15:49:34.34
>>18
ありがとうございます。
でもユーザーフォームでなくてシート上の
フォームコントロールなんです。
その場合はどうしたらいいですか?


23:デフォルトの名無しさん
12/04/14 16:49:19.92
>>22
Shapesで回してControlFormat.Valueみるとか
タイプの判別方法は解らんなぁControlFormatのプロパティいくつかたたいてエラーでるかどうかでみるぐらい?

24:デフォルトの名無しさん
12/04/14 16:50:20.05
>>22
Dim cb As Excel.CheckBox
Dim s As String
s = ""
For Each cb In ActiveSheet.CheckBoxes
s = s & IIf(cb.Value = 1, IIf(s = "", "", "・") & Left(cb.Caption, 1), "")
Next
ActiveCell.Value = s

25:デフォルトの名無しさん
12/04/14 17:01:09.35
>>24
ありがとうございます。完璧です!
散々苦労して出来なかったので思わずスゲーって声が出ました!


26:デフォルトの名無しさん
12/04/15 04:36:19.33
>ActiveSheet.CheckBoxes
こんなプロパティあったのか。知らんかった
つかオブジェクトブラウザで見たら、プロパティじゃなくて非表示なメソッドだな
なんで非公開なんだろうな

27:デフォルトの名無しさん
12/04/16 00:55:22.81
ActiveChart.SeriesCollection(1).Selectを、Selectを
使わずにSeriesCollection(1)を変数に入れて使い回し対のですが、
変数への入れ方を教えて下さい。

28:デフォルトの名無しさん
12/04/16 01:11:52.27
>>27
SET

29:デフォルトの名無しさん
12/04/16 02:08:31.69
BeforeDoubleClickイベントで得たRangeオブジェクト(Target)の
n個隣のRangeオブジェクトはどうやって得ればいいでしょうか?
offsetでどう書けばいいか分かりません…

30:デフォルトの名無しさん
12/04/16 08:35:21.13
Cells(Target.Row, Target.Column - n)

31:デフォルトの名無しさん
12/04/16 12:35:53.27
>>29
n個右なら
Target.Offset(,n)
>>30
変なもの教えるなよ


32:29
12/04/16 23:25:26.88
>>31
おお、こんな簡単なのがあったとは
>>30みたいな感じでCellsプロパティから引っ張ってくるものばかりと
有難うございました

33:デフォルトの名無しさん
12/04/16 23:50:47.33
質問者がoffsetでどう書けばって言ってるんだが...
つか質問者もoffsetのヘルプ見れば解りそうなもんだが

34:デフォルトの名無しさん
12/04/16 23:53:51.13
16進数をiniファイルへ書き込み、読み込みをするにはどうしたらいいでしょうか。
ユーザーフォーム上のコマンドボタンの色の管理のために、現在はVal関数を
使っているのですが色が今一正確に再現出来ません。
宜しく御願いします。

35:デフォルトの名無しさん
12/04/16 23:59:47.22
>>34
excel vba iniファイル
でググればヒントがたくさん見つかるよ

36:デフォルトの名無しさん
12/04/17 22:07:37.57
何らかのマクロ処理後XLSで保存するマクロを、2003と2010両方で
動くようにするには、2010では2003の形式で保存するようにすればいいと思うんだけど、
この部分って2003でも通用しますか?

自分でテストすれば良いだけなのですが、調べなからじゃないと分からないので
考え方が正しいかどうか知りたいです。
宜しく御願いします。

37:デフォルトの名無しさん
12/04/17 22:17:36.18
>>36
問題ありません

38:デフォルトの名無しさん
12/04/18 16:29:34.62
保存せずにブックを閉じたいのですが、ThisWorkBook.Saved=True は
標準モジュールに書いても無効でしょうか?
ブックのCloseイベントに書かないと駄目ですか?

39:デフォルトの名無しさん
12/04/18 16:51:10.05
実行した時点で無効化が有効になる

40:デフォルトの名無しさん
12/04/18 17:05:25.98


41:デフォルトの名無しさん
12/04/18 18:08:27.98
どこに書いても問題ないよ
いつ実行されるかが重要なんだから

42:デフォルトの名無しさん
12/04/18 18:38:24.16
close部に記述すると、ブック終了時に実行されるので、有効になる。
それ以外の部分に記述すると、実行されtrueを維持している場合のみ、ブック終了時に有効。
実行していない場合はその限りではない。

43:デフォルトの名無しさん
12/04/18 20:45:13.71
Wordのオートシェイプにクリックイベント仕込むのは無理ですかねぇ。
Excelの用にOnActionが使えないようで・・・。

自前チェックボックスのため、押すたびに□>■になるものを作っていまして、
ラベルコントロールで代用してたのですが、ラベルって50個も置くと重くて重くて・・・。

44:デフォルトの名無しさん
12/04/18 21:04:38.20
>>43
Wordの質問スレに行ってみればいいんじゃない?

45:デフォルトの名無しさん
12/04/19 02:29:14.38
シート上のフォームコントロールで
ドロップダウンリストを作成しているのですが、
エクセル一行空白を設定しており、
エクセル立ち上げ時には空白状態にしておきたいのですが、
コードが解りません。
ちなみにテキストボックスは
TextBox1.Text = vbNullString
の様に記述しています。
解る方ご教示下さい。


46:デフォルトの名無しさん
12/04/19 12:14:39.44
>>45
1行目が空行なのであればこんな感じ?

Dim d As Excel.DropDown
For Each d In ActiveSheet.DropDowns
d.ListIndex = 1
Next

47:デフォルトの名無しさん
12/04/20 02:19:47.93
>>46
ありがとうございます。
出来ました。

48:デフォルトの名無しさん
12/04/21 00:57:57.99
いいってことよ

49:デフォルトの名無しさん
12/04/21 09:31:49.67
気にすんな!

50:デフォルトの名無しさん
12/04/21 10:18:20.66
誰だよwww

51:デフォルトの名無しさん
12/04/21 15:43:05.10
かまわんよ

52:デフォルトの名無しさん
12/04/22 09:13:43.06
グラフの右隣の行番号を取得するにはどうすればいいでしょうか?

53:デフォルトの名無しさん
12/04/22 10:48:08.84
>>52
右隣の行番号ってのが何のことかよくわからんが
グラフの左上端にあるセルの行番号ならこれで取得できる

Dim c As ChartObject
For Each c In ActiveSheet.ChartObjects
Debug.Print c.TopLeftCell.Row
Next

54:デフォルトの名無しさん
12/04/22 13:29:41.46
質問です。
OSはwindows7 professional SP1
Excellは2007です。
現在、小文字で500~600文字程度ある文字列が500列あります。
その中に存在する特定の文字列、たとえばaggtcaを検索し、大文字にし色を変えるというマクロを組んでおります。
それが以下になります。
Sub Try1()
Dim c As Range
For Each c In Selection
RepChar c, "aggtca", 3 ' サブプロシージャ呼び出し
Next
End Sub

'c: 対象セル  What:検索文字列  ColorIndex:Font色Index
Sub RepChar(ByVal c As Range, What As String, ColorIndex As Long)
Dim j As Long
Do
j = InStr(j + 1, c.Text, What)
If j = 0 Then Exit Do
With c.Characters(j, Len(What))
.Text = UCase$(What) ' 大文字にする
.Font.ColorIndex = ColorIndex ' Font色 変更
End With
Loop

End Sub
しかしながら、検索対象文字列が255文字までなら思う通りに動きますが、256文字以上になったら色が変わるだけになってしまいまいました。
なにかいい解決案を思い浮かぶ方がいたらご教授願います。

55:デフォルトの名無しさん
12/04/22 14:13:56.85
>>54
一旦文字列変数に代入して大文字に変換したあとにセルに代入し直して文字色を変えるとか

56:デフォルトの名無しさん
12/04/22 14:33:00.84
>>54
VBAの制限
セルから文字列を取り出す時に、Textプロパティを含むいくつかの命令では255文字以下しか扱うことができない
大文字への変換と色の変更は別々にやるしかない

Sub RepChar(ByVal c As Range, What As String, ColorIndex As Long)
  Dim j As Long
  Dim str As String, WhatU As String
  WhatU = UCase$(What)
  str = c.Text
  j = 0
  Do
    j = InStr(j + 1, str, What)
    If j = 0 Then Exit Do
    Mid(str, j, Len(What)) = WhatU ' 大文字にする
  Loop
  c.Value = str
  j = 0
  Do
    j = InStr(j + 1, str, WhatU)
    If j = 0 Then Exit Do
    c.Characters(j, Len(What)).Font.ColorIndex = ColorIndex ' Font色 変更
  Loop
End Sub

57:デフォルトの名無しさん
12/04/22 18:40:27.33
初歩的な事で申し訳有りませんが、教えて下さい。

B3=VLOOKUP($A3,sheet2!$A:$J,6)
B4=VLOOKUP($A4,sheet2!$A:$J,6)
と、A列の検索値が空白になるまで続くのですが、
マクロで計算結果のみを表示する方法を教えて下さい。
宜しくお願いします。

58:デフォルトの名無しさん
12/04/22 18:51:25.44
>>57
WorksheetFunctionプロパティを使えばいい

Range("B3").Value = Application.WorksheetFunction.VLookup(Range("$A3"), Worksheets("sheet2").Range("$A:$J"), 6)

59:デフォルトの名無しさん
12/04/24 13:08:16.78
ネットから下記のようなカンマ区切りのCSVを読み込むコードを使っています。

Do Until EOF(intFF)
' レコードを読み込む
Input #intFF, X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8)
   :
   :
Loop

CSVファイルのある1行に 2012/3/11,12:00:05,・・・とあると
2012/3/11が2012、12:00:05が12としか読み込まれません。
例えば 日付2012/3/11,時間12:00:05 等、何か文字がついていると
日付2012/3/11 と読み込まれます。

数字のみでも読み込むにはどうしたらいいですか?
宜しく御願いします。

60:デフォルトの名無しさん
12/04/24 13:27:13.17
>>59
>>1
>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

61:デフォルトの名無しさん
12/04/24 13:41:48.23
これってVB6のコードなの?


62:デフォルトの名無しさん
12/04/24 13:52:37.31
>>59
Excelの機能でCSVファイルを読み込めばいいよ

63:デフォルトの名無しさん
12/04/24 18:05:20.05
>>60
csv読み込みまでいかんと申すか!

64:デフォルトの名無しさん
12/04/24 18:25:33.59
いい加減、>>1のテンプレ見直そうよ。
ずーーーーと前から何回か話題に出してるんだけど、このテンプレPart4で誰かが勝手に作った奴で、
それ以降★○だから駄目とかいう奴がうざいんだわ。同一人物かもな。

65:デフォルトの名無しさん
12/04/24 18:42:26.28
>>64
そんな昔からの経緯を知ってるならお前が率先して見直せよ
何もせずに文句だけ言うやつが一番うざいわ

66:デフォルトの名無しさん
12/04/24 19:30:13.96
そして誰も答えない


やったことないからわからんけど、文字列に格納して自分で加工したら?
読み出しが出来ればだけど

67:デフォルトの名無しさん
12/04/24 20:16:19.92
ある処理をしたときに

 Cells(i, 2).Value = "Error"

と値を入れるのですが、そのセルはシートの保護が掛かっているいる為
エラーになります。

ループでまわし、かつその途中で人的操作が入る為
一番最初に保護の解除を行い、最後に保護をするのは避けたいです。

ただ、Cells(i, 2).Valueのループの回数分、保護/保護の解除のするのは、

無駄に処理が重くなりそうなので避けたいのですが。

なにか妙案はありませんか?

68:デフォルトの名無しさん
12/04/24 20:29:47.46
>>67
On Error Resume Nextでスルーするのは駄目なのか?
嫌なら Err.Numberで判定すれば

69:デフォルトの名無しさん
12/04/24 20:51:03.76
>>67
UserInterfaceOnly

70:デフォルトの名無しさん
12/04/24 20:59:56.10
>>59
配列変数XをString型で宣言すればいい
Dim X(1 To 8) As String

71:デフォルトの名無しさん
12/04/24 21:59:42.33
>>67
セルに入れるだけなら
仮シート作って最後に転写
配列に格納して最後に書き出し
のどちらか
俺なら後者だが

72:67
12/04/24 23:12:35.29
>>68
>>69
>>71
ありがとうございます。その手で解決できました

73:デフォルトの名無しさん
12/04/24 23:19:04.14
そういうの嫌いじゃない

74:デフォルトの名無しさん
12/04/25 16:48:59.60
>>66
>>62で答えてるじゃん。
コード書かないと回答とは思わなかったのかな。

75:デフォルトの名無しさん
12/04/25 19:39:53.89
質問があります
VBA初心者です
会社でVBAマクロを作っていたのですが、サーバーにあるファイルにたいしてWorkbooks.OpenやCloseしかしてなかったのですが、サーバー上のファイルが消えてしまいました
基本的に書き込みや削除などの操作は行っていないのですが、OpenやCloseのみでも参照先のファイルが消える可能性があるのでしょうか
ちなみにOPENには特にオプション指定はしていません
また、ローカルのファイル対するOpenでは現象が再現せず、再現しなかったファイルをそのままサーバーに置いて、それを参照すると消えました。


76:デフォルトの名無しさん
12/04/25 19:45:18.09
>>75
ソースコードも見ずに第三者が答えられるわけがない

77:デフォルトの名無しさん
12/04/25 19:59:32.17
>>76
失礼、ファイルの持ち出し不可能なのでソースをもってくることはできませんでした
聞きたかった事としてOpenやCloseによってはファイルが消える可能性があるかということを知りたかったのです

78:デフォルトの名無しさん
12/04/25 20:27:19.11
2003と2010で同じマクロを使っています。
2010で使用する時にリボンを畳む方法を教えて下さい。
2010で使用する時のみマクロファイルを読み込まないといけない気がするのですが
やり方がわかりません。

79:デフォルトの名無しさん
12/04/25 20:52:07.30
>>75
workbook.open,workbook.closeだけならないよ
他のコードなり操作なり見ないとわからんけど
vba側だけじゃなくて、サーバー上でどういう管理されてるかも含めんとね
ローカルなcloseは問題ないんだろ?
ネットワークを介さないサーバー上でのopen,closeの挙動も見ておいたら

80:デフォルトの名無しさん
12/04/25 20:56:59.03
>>78
Application.VersionでExcelのバージョンを判定して処理を分けるとか?

81:デフォルトの名無しさん
12/04/25 21:05:53.16
>>79
ありがとうございます
また明日コードみてみます
実はバグがあって 最初に読み込んだ(Openした)ファイル(参照ファイルA)の、あるセルに書き込まれてる「ファイル名(参照ファイルB)」を開きに行くんですが、セルに何も入力されていなくてもOpenするようになってました
(おそらくファイル名「""」をOpen。Closeは""でもパスが通るようになっていたか未確認)

ちなみに、この状態になるファイル(参照ファイルA)にアクセスした時に消えました。
この時、参照ファイルAは消えないのですが、同一フォルダにあるファイル(ファイルBの候補(?))が全て消えました(ローカルで試した場合は発生せず、サーバーは100%発生します)

82:75
12/04/25 21:10:34.50
ものすごく分かりにくい文章になりましたので注釈します;
サーバー上に(参照元となる)ファイルAと、ファイルAのセルから参照先が判断されるファイルB群があって、参照先を示すセルが空欄になってました
この時、異常処理が入ってなかったので、無理やりファイル名""で参照にいってると思われます

明日また調べてみます

83:デフォルトの名無しさん
12/04/25 21:11:13.89
>>81
サーバ上のファイルを監視しながらステップ実行すれば
どのタイミングでファイルが消えるかわかると思うよ

84:デフォルトの名無しさん
12/04/25 22:41:12.91
>>73
× そういうの嫌いじゃない
○ そういうの好き

素直になりなさい

85:デフォルトの名無しさん
12/04/25 23:46:40.74
>>81
openに渡すときにパスがないとコンパイルエラー起こす気がするんだが・・・

86:デフォルトの名無しさん
12/04/26 09:59:25.61
>>80
レス、有難うございます。
マクロの記録でリボンを畳むときの命令を見ようとしたのですが、マクロに記録されません。
と言うことは、VBAではできないということですよね?


87:デフォルトの名無しさん
12/04/26 10:37:45.26
>>86
Excel4.0マクロを使うとできる。
リボン、非表示、Excel4.0マクロ、でググれ。携帯電話からなのでコードは書かない。

88:デフォルトの名無しさん
12/04/26 19:08:44.84
チュートリアルをひと通り読んだのですがわからりません。
質問させてください。

変数Aにセルのデータを配列として代入したいのですが、

|りんご,みかん,パイナップル|
|アボガド|
|きゅうり|

このようにカンマ区切りと、そうでないセルが混在しています。



A=りんご,みかん,パイナップル,アボガド,きゅうり
B=Split(A, ",")
このようにして最終的に別のセルに一つづつ抜き出したいのですが、
どのようにして上のようなデータを配列としてAに代入すればいいのでしょうか?

89:75
12/04/26 19:18:54.25
昨日、不正な(エクセルファイル指定しない)方法でブックをオープンしようとするとファイルが消えると言っていた者です
今日、会社で確認してきました
ステップ実行してOpenの際にファイルが消えます

新しくエクセルファイルを作って、最小構成(ファイルパスも直値)のマクロで確認してみたところ、以下のコードでも消えました

Sub Button_Click()
  Workbooks.Open "Y:共有サーバー\問題のあったフォルダ\", ReadOnly:=True
End Sub

このマクロでエラーメッセージが発生後、「Y:共有サーバー\問題のあったフォルダ」内のファイルが全て消えました
ローカルで(パスは変えて)確認した場合は、やはりファイル消えてませんでした

90:デフォルトの名無しさん
12/04/26 19:27:20.88
多分ここじゃ解決しないだろうけど

ローカルっていうか、サーバー上のシステムでネットワークを介さないで開けたってことでいいのか
サーバー側のシステムは?
Workbook.Open渡されてちゃんと開けるのが前提だぞ、win入っててもexcelか.netのライブラリないと
作業ディレクトリも気になる


91:デフォルトの名無しさん
12/04/26 19:28:12.93
>>88
例えば、A1:E1セルに値をセットしたいならこんな感じでできる

A = "りんご,みかん,パイナップル,アボガド,きゅうり"
B = Split(A, ",")
Range("A1:E1").Value = B

92:75
12/04/26 19:31:01.68
>>90
ファイル名を正しく指定すればOpenで開けます

93:デフォルトの名無しさん
12/04/26 19:35:18.29
あっそ

94:デフォルトの名無しさん
12/04/26 19:50:25.08
>>89
ホントにファイルが消えるならMSのサポートに言った方がいいよ
んで、できれば結果を報告してくれるとうれしい

95:デフォルトの名無しさん
12/04/26 20:02:00.86
>>91
返信有り難うございます。
配列のデータをセルに書きだす方法はどうにかわかったのですが、
カンマ区切りのデータと、区切られてないデータを
変数Aに入れる方法がわからないんです。

例えばですが
Dim A As Variant
A = Range("A1:E1")
B = Split(A, ",")
Range("A1:E1").Value = B

このように指定するとデータの型が合いませんと出て困っています。
A = Range("A1:A1")と指定すれば問題なく出力されるんですが・・・

96:デフォルトの名無しさん
12/04/26 22:10:15.77
>>95
こんな感じ?

Dim A As String
Dim r As Range
A = ""
For Each r In Range("A1:E1")
A = A & IIf(A = "", "", ",") & r.Text
Next

97:デフォルトの名無しさん
12/04/26 22:37:25.43
>>96
ありがとうございます。動きました。まさに理想の動作です。
このコードがどんな意味かをじっくり勉強させてもらいます。

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

98:デフォルトの名無しさん
12/04/26 23:49:30.15
>>89
そもそも「Y:共有サーバー\問題のあったフォルダ」というパス指定があやしいが
ネットワークドライブとしてY:を割り当ててるのか?
共有サーバーの部分は、実際のサーバ名が入ってるのか?
Y:の後に\はないのか?
ネットワークドライブなら、割り当てたユーザとエクセルを実行しているユーザは同じか?

サーバとクライアントのOSやエクセルのバージョンとかもよくわからんが
まあエクセルの問題じゃない気がするな


99:デフォルトの名無しさん
12/04/27 00:00:20.24
>>98

>ネットワークドライブとしてY:を割り当ててるのか
割り当ててます

>共有サーバーの部分は、実際のサーバ名が入ってるのか?
入ってます。実際のフォルダはもう2個くらい深いところにあります
会社のフォルダ構成をそのままネットにアップするのもどうかと思ったので、スレ説明用に簡略化しました

>Y:の後に\はないのか?
書き忘れてました。実際には入ってると思います

>ネットワークドライブなら、割り当てたユーザとエクセルを実行しているユーザは同じか?
同じです

100:デフォルトの名無しさん
12/04/27 00:11:44.71
>>99
>>89のマクロを実行したらファイルが消えるんだからExcelの問題で間違いないでしょ
アホなレスは相手にしなくていいから早くマイクロソフトに問い合わせなさい

101:デフォルトの名無しさん
12/04/27 02:44:43.40
ファイルが消えるってのは、クライアントから見えなくなるってんじゃなくて
サーバの共有ディスクから削除されてるってことなのか?
ほんとにこのマクロでファイルが削除されるなら、
恐ろしくてマクロでブック開くとかやってられんわ

102:デフォルトの名無しさん
12/04/27 05:16:56.92
これ関係か
URLリンク(okwave.jp)

共有フォルダってLinux製のNASとかかな

サーバ上の他のフォルダはセーフなのか?

103:デフォルトの名無しさん
12/04/27 09:36:30.33
自分の環境ではAサーバーのファイルのマクロを実行してBサーバーのFileOpen
BのシートをAファイルにコピー、Bファイルを閉じるってのを
毎日タスクで実行してるけど問題は起きてないよ。
参考になるか解らないけど。

104:デフォルトの名無しさん
12/04/27 11:22:50.09
小川慶一って人の講座か、学校の講座か迷ってます

どっちの方が内容が濃いんでしょうか?


105:デフォルトの名無しさん
12/04/27 11:27:08.49
これだけネットに無料で情報があふれているのに
お金払ってまで講座を受ける理由がわからない

106:デフォルトの名無しさん
12/04/27 11:56:31.03
マクロでループ処理をしているのが原因で、シート上のコマンドボタンのEnabledを切り替えた時に、
Captionの文字色がボタンをクリックしないと切り替わらなかったので、ループ処理中にDoEventsとSleepを
入れてたりしているのですが、きちんと切り替わる命令ってないでしょうか?




107:デフォルトの名無しさん
12/04/27 14:06:08.51
難読問題?

108:デフォルトの名無しさん
12/04/27 14:19:19.33
リフレッシュみたいなのない?

109:デフォルトの名無しさん
12/04/27 17:02:48.50
グラフの横軸の目盛りの事で教えてください。
左端が-100、右端が100で目盛りの刻みは15毎だったり23毎だったりと条件によって変わるのですが、必ず0の目盛りを表示させることは可能ですか?
縦軸との交点を0にするのはせずに、目盛りして表示したいという事です。

110:デフォルトの名無しさん
12/04/27 17:38:36.05
>>109
ヘルプでAxisのメンバを調べましょう

111:デフォルトの名無しさん
12/04/27 18:04:23.29
お断りします

112:デフォルトの名無しさん
12/04/27 22:41:40.30
111は違います。109ではないです。


113:デフォルトの名無しさん
12/04/27 22:43:51.91
109だろうが110だろうが111だろうがどうでもいい

114:デフォルトの名無しさん
12/04/27 23:08:20.65
わからんならでてくんな。
ちなみにできんよ。

115:デフォルトの名無しさん
12/04/29 02:39:28.43
教えていただきたいのですが書き込みできるかどうかテスト

116:デフォルトの名無しさん
12/04/29 02:49:20.60
AからF列に一つの一覧があります。
この一覧を、シート上の別の場所、たとえば、H~M列に張り付けようとしています。
これは、マクロの記録を使えばできることですが、ほかの人がオートフィルタを使って
条件を絞り込んで結果を出しているとき、その状態でVBAマクロを実行すると、
コピー先(H~M列)に張り付ける位置がコピー元の行の位置があわず、ずれてしまいます。

これに対して自分が思いついた案では、マクロ実行開始時に表内にオートフィルタが設定されていれば
解除するようにしています。しかしこれをやると、解除するのに時間がかかるので使えるのか微妙です。

本題に入りますが、
フィルタが設定されている状態で、コピー元をコピー先へ、行をずらすことなく張り付けることは可能でしょうか。

117:デフォルトの名無しさん
12/04/29 09:28:40.39
>>116
オートフィルタを解除するのに時間がかかるってのがよくわからない

118:デフォルトの名無しさん
12/04/29 23:22:09.01
>>116

>フィルタが設定されている状態で、コピー元をコピー先へ、
>行をずらすことなく張り付ける

VBAでやる場合は、SpecialCellsで検索すると幸せになれる。

直接手作業する場合は、
(1)2007、2010
ホーム→検索と選択→ジャンプ→セル選択→可視セル
(2)2003
編集→ジャンプ→セル選択→可視セル
(3)2003、2007、2010共通のショートカット
F5押下→セル選択→可視セル

(1)~(3)のお好きなものをどうぞ。
(3)が共通で作業手順が一番短い。

119:デフォルトの名無しさん
12/04/30 13:07:27.29
クリップボードに文字列をセットして終了したいのですが、Excelを終了すると同時に
自動的にクリップボードがクリアされてしまいます。
どうやったらクリップボードの内容を保持したままExcelを終了できますか?
以下、現在のコードです

Set TempObject = New MSForms.DataObject
With TempObject
  .SetText "文字列"
  .PutInClipboard
End With

120:デフォルトの名無しさん
12/04/30 13:35:26.32
>>119
SetClipboardData vba でググれ

121:デフォルトの名無しさん
12/05/01 10:31:34.69
VBSから A.xls を自動起動させているのですが二重起動防止って出来ますか?

122:デフォルトの名無しさん
12/05/01 11:43:29.71
>>121
できる

123:デフォルトの名無しさん
12/05/01 11:48:01.01
>>122
死ね
どうするかと聞いておる

124:デフォルトの名無しさん
12/05/01 11:49:45.30
>>123
そもそもExcelは同名ファイルを二重起動できないんだが
どうやって二重起動させてるのかVBAのコードを見せろカス

125:デフォルトの名無しさん
12/05/01 11:52:42.73
>>124
ハゲは黙ってろ

126:デフォルトの名無しさん
12/05/01 11:54:39.17
>>121
ここはExcelVBAのスレだ
VBSの質問はよそでやれ

127:デフォルトの名無しさん
12/05/01 11:59:46.07
>>125
マナーがなってないと頭悪くみえますよ

128:デフォルトの名無しさん
12/05/01 12:50:41.24
二重起動ってググるだけでもっさり出てくるんだが

129:デフォルトの名無しさん
12/05/01 12:52:17.48
だれがもっさんだハゲ

130:デフォルトの名無しさん
12/05/01 12:58:27.01
んじゃサーニャ貰うわ

131:デフォルトの名無しさん
12/05/01 22:49:35.06
マクロで追加したブックをファイルメニューから別名保存した場合、追跡というかどういう名前に
変わったかを把握したいのですが、どうすればいいですか?
環境はxp、excel2003です。
宜しく御願いします。

132:デフォルトの名無しさん
12/05/01 23:06:02.30
>>131
意味がよく分からない
別名保存したのが第三者で、その人が付けたファイル名が知りたいの?
聞けばいいじゃない?

133:デフォルトの名無しさん
12/05/01 23:28:47.00
>>132
モーダルレスでフォーム出しっ放しの状況なんだろ
昔悩んで諦めた

134:デフォルトの名無しさん
12/05/01 23:29:32.97
VBAの機能じゃ無理なはず
代替案としては、ブック終了時もしくは定期的にファイル名を保存するとかかな

135:デフォルトの名無しさん
12/05/01 23:43:49.85
>>131
Workbook.Nameでファイル名を取得できる

136:デフォルトの名無しさん
12/05/01 23:58:40.13
Excel 2010 なら WorkbookAfterSave なんて言うイベントがあるんだけどね。

Excel 2003 だと、WorkbookBeforeSave で、独自のダイアログ出して保存までコードでやる
ぐらいしか思いつかない。

137:デフォルトの名無しさん
12/05/02 00:25:58.49
>>133
どういうこと?

138:デフォルトの名無しさん
12/05/02 00:30:30.03
マクロで追加したブックなら、そのブックに保存用のボタンでも追加すればいいんじゃね?
まぁ確実に押してくれる訳じゃないけどさ

139:デフォルトの名無しさん
12/05/02 00:36:19.41
ちがうだろ

まず、なんでそんなことやる必要があるのか?だ

140:デフォルトの名無しさん
12/05/02 04:00:58.07
すみません。どこで聞いたらいいのかわからないので質問させてください。

VBA初学者です。
『最初から~・・・VBAのプログラミングのツボとコツが・・・』を読み終えました。
次も既存の入門書を読んだほうがいいらしんですが、お薦めの本はありますか。

よくわかるExcel2007マクロ/VBA入門→実践編、と読んでみようと考えてますがどうでしょうか?

141:131
12/05/02 05:53:22.55
ユーザーフォームに複数のボタンを付けてメニュー代わりにしています。
その関係でフォームを出しっ放しにしています。
とある処理の時に新規にブックを追加するのですが、一旦その新規ブックの処理が終わっても、再度そのブックに追加で処理をする必要が出てきました。
新規追加した時はブック名は把握していますが、モーダルレスなのでオペレーターが途中で別名保存する可能性があるので質問させていただきました。
新規ブック追加はせずにフォームのブックで処理していくのがよさそうですね。
ついでになってしまうのですが、その場合メニューからの保存する際にユーザーフォームやマクロを外して保存する事は可能でしょうか?
長文で申し訳ないですが、よろしくお願いします。

142:デフォルトの名無しさん
12/05/02 07:58:06.34
>>141
新規ブックを作成→必要なシートを新規ブックにコピー
→名前を付けて保存
じゃダメなの?


143:デフォルトの名無しさん
12/05/02 08:00:06.80
>>131
新規ブックのブック名をテキストファイルに書き込んどけばいいんじゃね?
新規ブックを閉じたとしても、ファイル名は残ってるわけだから何とかなるだろ。
ブック名を書き込んだテキストファイルをいつ削除するかを検討する必要はあるけど。

144:デフォルトの名無しさん
12/05/02 09:16:06.75
>>141
>>135がダメな理由がわからない

145:デフォルトの名無しさん
12/05/02 09:34:40.15
>>140
読書なんて個人の好みなんだからあなたの好きにすればいい

146:デフォルトの名無しさん
12/05/02 12:42:17.93
モーダルなのかモードレスなのかはっきりしてくれ>モーダルレス

147:デフォルトの名無しさん
12/05/02 13:42:14.14
>>146
その程度の誤用が読みとれないようならこのスレに来る資格はないよ
もっとエスパー能力を上げてきてね

148:デフォルトの名無しさん
12/05/02 13:45:39.55
>>147
アホ

149:デフォルトの名無しさん
12/05/02 13:45:46.52
99.9%はモードレスのことなのだろうなぁと思う。
モーダルなのかモードレスなのかわからないのはアスペ。

150:デフォルトの名無しさん
12/05/02 13:46:41.65
> モーダルレスなのでオペレーターが途中で別名保存する可能性がある

これ読んで、どっちかわからんとかありえない。

151:デフォルトの名無しさん
12/05/02 13:48:02.82

間違いを指摘された本人が必死に弁護中



152:デフォルトの名無しさん
12/05/02 13:49:56.52
こんにちわ、米国で働いています、モーダルビッシュ有と言います

153:デフォルトの名無しさん
12/05/02 14:12:31.98
>>146必死すぎw

154:デフォルトの名無しさん
12/05/02 14:36:57.11
あ、どうもダルベスです

155:デフォルトの名無しさん
12/05/02 18:48:42.35
皆さんどんな環境(仕事)でVBA使ってるんですか?
私はmySQLで動作するタイプのwebサイトの管理を任されて
csvを使う都合上、使うようになりました。

他にはどんな場面で使うものか興味があって

156:デフォルトの名無しさん
12/05/02 19:15:59.03
そらぁ日常の会社でのルーチンワークで帳票作成とか、、、
投資家の中には、自分で抽出基準を作ってその判定をVBAで、、、
なんて奴もいるだろうし。。。

157:デフォルトの名無しさん
12/05/02 19:45:06.80
モードレスです、お恥ずかしい。
何年かぶりの素人プログラムで用語が怪しいです。

158:デフォルトの名無しさん
12/05/02 21:22:03.10
質問者である>>131と、他人のように振舞っている>>133
ともに「モーダルレス」なる誤用をしているのは
なんだか自演くさいのだが、
誰もそこに突っ込まないのは何らかの暗黙の了解があるのか?

159:デフォルトの名無しさん
12/05/02 21:28:48.22
韓国の紙幣に韓国海が登場
URLリンク(imgnews.naver.com)


                            ,,fヽy
                       rヽ__)`~ i'"   ・           ゚
     *              /    ,,ノ          *
               .    <'"    ,ィ'~
                   ` >∧__∧ヽ   ウェー、ハッハッハ !!!
           ・        <ヽ`∀´>ヽ   世界中が ウリナラ から
                     ~ヽ,   ヽ,    孤立してるニダ !!!!    *
         .       ・     <     }          。
    *                  )     〉    ゚
                      〈   _,,,/
             ゚         ´‐'"~   .            ・

          。                                  *

              _,..-‐''''""~´ ̄ ̄ ̄ ̄~"'''‐-,.、
 .         ,.-‐''" ─‐‐''",.、.:.:.:.:.:.:.:\、.:.:.:.:.:.:.:~"'‐-、
        ,.‐''"''''""~´::::::::::::::::::::::\\:::::::::::::::"'''''\"''--、.:.:.゙''‐.、
      ,.‐'":::::::::::::::::::::::::::::::::::::::::::::::::゙''‐、''l:::::__,....-‐'''"    ''.:.:.:::゙'ヽ、
    ,.‐'"::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::~"‐--‐‐,        ''.:.:.:.  \
  /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/"          .:.:.:.  ヽ、
 ,."::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/                .ヽ

160:デフォルトの名無しさん
12/05/02 23:03:52.99
>>158
ここにいるのは俺とお前だけなんだよ、いわせんな

161:デフォルトの名無しさん
12/05/03 02:01:16.22
「選択したセルの値が左隣のセルの値と同じ時、文字を赤文字にする」
というマクロを作ってみたのですが

Sub

'FormatConditions(1)
 Selection.FormatConditions.Delete
 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
  Formula1:=ActiveCell.Offset(0, -1).Value
 Selection.FormatConditions(1).Font.ColorIndex = 3

End Sub

これだとセル1箇所選択の場合はOKなんだけど、複数セルを同時に選択すると
期待したようにならない。

複数セルを同時に選択、列ごと選択して、上記のように実行するにはどうすれば良いのか?


162:デフォルトの名無しさん
12/05/03 02:07:47.17
>>161
まだ実験してないけど

sub
dim a as range
for each a in selection
if a.offset(0,-1)=a then
a.font.color=vbred
end if
next a
end sub

163:162
12/05/03 02:10:19.53
おお、いま実験したらバグなく動いた。
しかし選択がA列を含んでるとエラーが出たな。

164:161
12/05/03 02:47:25.22
動いた!
でも列選択だと時間かかる

165:デフォルトの名無しさん
12/05/03 03:07:53.53
>>163
if文でブランクセルをキャンセルしたら早くなりました

ありがとうです!

166:デフォルトの名無しさん
12/05/03 10:26:43.05
セルのクリックイベント等を動的に追加するやり方を教えて下さい。
あらかじめ設定してあるブックをVBAで複製しているのですが、複製元のブックを
触られてしまうことがあるので、新規にブックを作成するように変更したいのですが、
その際のイベントをどうするかが分からなくて変更に踏み切れません。
Excel2003です。
どなたか御願いします。

167:デフォルトの名無しさん
12/05/03 12:00:33.10
日本語でおk

168:デフォルトの名無しさん
12/05/03 12:36:13.40
>>166
複製元のブックを .xls のファイルではなく、テンプレート(.xlt)形式で用意しておくだけじゃダメなの?
テンプレートなら、ダブルクリックで開いても、新規文書の扱いになるので、
誤って元文書を編集してしまうことはなくなるはず


169:デフォルトの名無しさん
12/05/03 19:45:44.39
複製ってのがファイルコピーなら、エクセル関連の拡張子である必要すらないけどな


170:デフォルトの名無しさん
12/05/03 23:30:58.60
>>166
前半部分がさっぱりわからん。

「あらかじめ設定してあるブック」って何が設定されてるのか?
「ブックをVBAで複製している」という処理はどこに実装されているのか?

171:デフォルトの名無しさん
12/05/03 23:36:54.51
別に普通に分かるじゃん。
書いてあること分からないの?
引っ込んでろよ。


172:デフォルトの名無しさん
12/05/04 00:11:45.78
>>171
わかるんだったら回答してやりゃあいいんじゃん。
ってかお前>>166かw

173:デフォルトの名無しさん
12/05/04 00:13:21.63
>>166
複製元のブックに保護かけとけば触られないから安心だぞ

174:デフォルトの名無しさん
12/05/04 00:32:56.96
技術的に未熟な奴は
日本語からして駄目だよな

175:デフォルトの名無しさん
12/05/04 10:03:07.48
>>172
そうです、166です。

176:デフォルトの名無しさん
12/05/04 22:51:03.01
VBAの中でとりあえずbookを新規につくりそれにデータを入れたり編集したりしてるんだけど
そのbookに名前をつけたら怒られました(エラーが出ました)。
それってできないの?
仮にどこかに保存したらできるけど
ファイル名はそのbookが編集し終わったときにはじめて決定するから
仮に保存はしたくないんです。
いい方法はありますか?

177:デフォルトの名無しさん
12/05/04 23:12:57.65
>>176
>ファイル名はそのbookが編集し終わったときにはじめて決定する
編集し終わって保存するときにファイル名をつけるんだからそれでいいんじゃないの?

178:デフォルトの名無しさん
12/05/04 23:24:00.15
なにが困るのかわからんな

179:デフォルトの名無しさん
12/05/04 23:24:15.02
>>177
それ以前に
いろんなbookからデータをとってくるから
そのbookのnameを仮だとしても決めておきたいわけ。

180:デフォルトの名無しさん
12/05/04 23:25:10.17
>>178
想像力がないな。
というよりVBAでちょっとでも複雑なものを作ったことがないのかな。

181:デフォルトの名無しさん
12/05/04 23:38:34.36
>>179
一体どういう状況でファイル名が必要になるんだ?
もうちょっと具体的に説明できないの?

182:デフォルトの名無しさん
12/05/04 23:38:51.33
>>180
作り方が悪いだけだろ

183:デフォルトの名無しさん
12/05/04 23:40:21.80
>>176
>VBAの中でとりあえずbookを新規につくり

ここのソースを見せてみ
多分それが一般的じゃないんだと思う

184:デフォルトの名無しさん
12/05/04 23:41:54.39
大人気、自分。
>>183
普通にテンプレートとなるシートからコピーしてる。
なので activesheet.copy

185:デフォルトの名無しさん
12/05/04 23:42:00.28
何となくだけど

■現状
・設定用のシートと、その設定をもとにいろいろと処理するVBAスクリプトを含むようなxlsファイル(a)が存在する
・セルをクリックしたらイベントが発生するような処理を仕込んであるxlsファイル(b)が存在する
・(a)で設定をしたうえでVBAを実行させると、(b)を複製して新しいファイル(c)を作成する

■問題点
・ユーザが(b)を変更できてしまうため、(c)が意図したものにならない

■改善案
・新規ブックの状態から必要な変更を(a)のVBAで行って(c)を作成することにより、
 ((a)のVBAが修正されない限り)同じものができるようにしたい。

■改善案を実施するための問題点
・VBAでセルにクリックイベント等を設定する方法がわからん。

ってことなんじゃ。

すでに出てるように、保護とか先に検討すべきことがあるような気もするけど。

----------

VBAの中では変数を使ってアクセスするんだから、ブック作成時にWorkbookオブジェクトを変数にセットしておけば全然困らないよな。
他のbookからデータ取るときに仮の名前が必要になるなら、仮の名前を渡してあげればいいだけだし。

データを持ってるワークブックに新しく作成したワークブックオブジェクトを渡して、
相手のワークブックが名前を読み取るとかいう仕組みってわけじゃないだろうしさ。

186:デフォルトの名無しさん
12/05/04 23:45:53.50
>>184
>VBAの中でとりあえずbookを新規につくりそれにデータを入れたり編集したりしてるんだけど

既に、bookを新規に作ってデータを入れたり編集したりできてるんだよね?
釣りじゃないならこの部分のソースをちゃんと晒してみせて
じゃないとなぜファイル名が必要になるのかがわからない

187:デフォルトの名無しさん
12/05/04 23:49:35.89
>>185
エスパーするにも程があるぞw
書いてないことが足されすぎだ

188:デフォルトの名無しさん
12/05/04 23:52:23.88
>>186
正直に言うと、
オブジェクト変数でそのbookを変数にいれたいけど
そのコードを書くプロシージャがあるサブルーチン内なので
他のプロシージャから参照できない。
たぶんオブジェクト変数もローカル変数じゃなくグローバル変数にはできるだろうけど
「なるべく変数はローカルに」というポリシーを守りたいからしたくない。

189:デフォルトの名無しさん
12/05/04 23:54:27.75
ちょっと言ってることがよくわかりません

190:デフォルトの名無しさん
12/05/04 23:57:13.71
こんな感じのユーザー定義変数を作って
Type tmp
Book As Workbook
Name As String
End Type

こんな感じにbookと名前を仮にセットしとけばいいんじゃねーの
Sub aaa()
Dim WB(2) As tmp
With WB(0)
Set .Book = Workbooks.Add
.Name = "name1"
End With
End Sub

191:デフォルトの名無しさん
12/05/05 00:01:33.99
>>188
そのサブルーチンに引数を作ればいいと思うけど

192:デフォルトの名無しさん
12/05/05 00:01:56.96
>>188
お前の決めたポリシーに反したくないならそのポリシーとやらを全部列挙しろよ
じゃないと答えても無駄になるわ・・・

193:デフォルトの名無しさん
12/05/05 00:08:54.64
新規で作ったブックは保存するときに初めて名前が付けられる。
なので、新規で作った時にワザと作業用のデレクトリーに名前を付けて保存する。
保存するとそのブックと縁が切れるまでファイル自体は削除できないから、マクロ起動時、
または終了時に作業用デレクトリー内のファイルを掃除するようにしとけばいいんじゃないの。

194:デフォルトの名無しさん
12/05/05 00:09:47.68
>>190
それじゃそのプローシージャの中でしか使えないじゃん。
わたしはこれでも初心者だけど
「変数は原則ローカルで」というのはプログラミングの中級者以上の人でも、そんなに厳守しなくていいものなの?

195:デフォルトの名無しさん
12/05/05 00:11:53.25
>>193
自分しか使わないのならいいけど
これは仕事で使ってるし、少なくとも10人以上が使うから
各PCの構成をあまり把握してない状況で
仮保存&あとで消去はあまり(というか絶対)使いたくないな。

196:デフォルトの名無しさん
12/05/05 00:16:29.16
>>194
あなたが作ったポリシーを守るかどうかはあなた次第でしょ?

book.Activate しておけば
Application.ActiveWorkbook で参照できるでしょ
ダメかな?

197:デフォルトの名無しさん
12/05/05 00:20:28.31
>>196
多数のbookを開いて処理してるんだ。
その状況で作業対象のbook(最終的に保存する)に名前を付けておきたいのよ。
そのactivateするためには、そのbookの名前が必要でしょ?
最初はworkbooks(workbooks.count)としてたけど、いろいろ問題があって辞めた。

198:デフォルトの名無しさん
12/05/05 00:22:55.02
>>197
bookを大量に新規作成してるってこと?

199:デフォルトの名無しさん
12/05/05 00:33:09.35
>>190 を変更
サブルーチンに引数で渡し、戻ってきた段階で保存処理を実行すれば
Sub aaa()
Dim WB(2) As tmp
Call コードを書くプロシージャがあるサブルーチン(WB(1))
For Each x In WB
If x.Name <> "" Then
x.Book.SaveAs x.Name
End If
Next x
End Sub

Sub コードを書くプロシージャがあるサブルーチン(ByRef WB As tmp)
Set WB.Book = Workbooks.Add
WB.Name = "name1"
End Sub

200:デフォルトの名無しさん
12/05/05 00:35:21.01
全体のプロシージャの構成とその新規ブック作成のタイミングが
わからんと答えづらい。


メインのプロシージャに関してはグローバル変数で
宣言してもいいと思うが。

201:デフォルトの名無しさん
12/05/05 00:35:47.57
とりあえず>>192が全部列挙されるまで放置でよさそうだ
条件の後出しが多すぎ

202:デフォルトの名無しさん
12/05/05 00:41:26.35
ポリシーのバグを埋め合わせる為に
コードのバグを作り出してる感じだ

203:デフォルトの名無しさん
12/05/05 00:43:18.97
新規作成するブックが1つだけ
→Applicationが持ってるWorkbooksコレクションを全部なめて、把握していない名前があればそれが新規作成されたWorkbookオブジェクト

新規作成するブックが複数ある
→作成した時に適当にWorksheetを追加して、それに管理用の名前つける
  任意の作成したWorkbookオブジェクトを取得したいときは、Workbooksコレクションとその中のWorksheetsコレクションを調べる

とか。


Workbooksとかにビシバシとアクセスしてるなら、グローバル云々とかあんまり気にするなよって感じはするが。

204:デフォルトの名無しさん
12/05/05 00:43:46.84
>>199の修正
Sub aaa()
Dim WB(2) As tmp
Dim i
Call コードを書くプロシージャがあるサブルーチン(WB())
For i = 0 To 2
With WB(i)
If .Name <> "" Then
.Book.SaveAs .Name
End If
End With
Next i
End Sub

205:デフォルトの名無しさん
12/05/05 00:45:00.43
>>199の修正2
Sub コードを書くプロシージャがあるサブルーチン(ByRef WB() As tmp)
Dim i
For i = 0 To 1
Set WB(i).Book = Workbooks.Add
WB(i).Name = "name" & i
Next i
End Sub


206:デフォルトの名無しさん
12/05/05 01:19:19.06
>>197
StatusBarにブック名を待避しておくとか

Sub sp1()
Dim book As Workbook
Set book = Workbooks.Add
Application.StatusBar = book.Name
Call sp2
Application.StatusBar = False
End Sub

Sub sp2()
Workbooks(Application.StatusBar).Worksheets("Sheet1").Range("A1") = "wwwwwwwwwwwwwww"
End Sub

207:デフォルトの名無しさん
12/05/05 01:35:30.99
メインプロジェクトがあるなら、それに書けばいいじゃん
シートに書きたくないならtempモジュールにコードを動的に追加すりゃいい

208:デフォルトの名無しさん
12/05/05 02:36:57.35
つうか、変数をなるべく局所化するために、引数と戻り値ってのが存在してるんだが
シート追加するサブルーチンがあるなら、追加したシート戻せよ
Functionって知らないのかお前ら?


209:デフォルトの名無しさん
12/05/05 04:09:29.68
グローバル変数は使いたくないけど他から参照したいってなら
クラスモジュールを使うって手があるな
オブジェクト指向のいいとこどり

210:デフォルトの名無しさん
12/05/05 04:40:52.69
>>201
はげどう。
条件後出し多くて、回答しようと思っても振り回されてるだけだな。
エスパーしろよと言わんばかりの訳のわからん日本語並べられてもお互い疲れるだけだし。

>>176
さっさとソース晒せ。
ポイントとなる部分を抜き出して動作を再現できるコードで充分なんだけど。

211:デフォルトの名無しさん
12/05/05 05:33:01.44
176のポリシーとエクセルの仕様が不適合だから無理

212:176
12/05/05 11:06:53.66
>>176は釣りでした
すみません

213:デフォルトの名無しさん
12/05/05 12:22:19.49
replaceって、関数にもあるし、メソッドにもあるし、混乱しない?
Worksheet関数にも機能が違うのがあるし

214:デフォルトの名無しさん
12/05/05 12:37:04.92
>>212は嘘です!
>>176の釣りは私がしました!!

215:デフォルトの名無しさん
12/05/05 13:19:54.12
個人用マクロに作ったFunctionを
どんなbookででも使えるようにする方法って、
ひょっとしてないの?

216:デフォルトの名無しさん
12/05/05 13:29:32.23
使えばいいじゃない

217:デフォルトの名無しさん
12/05/05 13:30:26.55
オープンできるなら不可能じゃない


218:デフォルトの名無しさん
12/05/05 13:45:24.84
>>213
しません

219:213
12/05/05 13:51:19.67
>>218
してください。
そうじゃないと話が始まらない。

220:デフォルトの名無しさん
12/05/05 13:54:37.22
>>219
つまらない質問はしないでください

221:デフォルトの名無しさん
12/05/05 17:04:12.31
まあ、テンプレートとして使うからいじられると困るってんなら
文字通りエクセルテンプレート形式なxlt使うのが普通じゃねーの

222:デフォルトの名無しさん
12/05/05 17:24:53.27
VBAでブラウザを操作したり(webページを開いたり、自動ID,PW入力してログインしたり、毎日Webからデータをとったり画像を自動保存したり、etc. etc.)
Outlookを操作(テンプレート本文・件名があってその一部にExcelのセルがデータを入力したりetc. etc.)したり、したいです。

そのことに特化した本(中級・上級向けになると思います)ってないですか?

どうもVBAは初心者向けの本がほとんどで困っている。
そのほうが売れるのはわかるが。

223:デフォルトの名無しさん
12/05/05 17:36:33.35
>>215
アドインてのが、それにあたる機能だと思う

224:デフォルトの名無しさん
12/05/05 18:42:41.41
>>222
本買うまでもなくネットの情報で簡単に実現できそうな内容に思える
そもそも中級・上級向けどころか殆どExeclに関係がない
MSDNライブラリ見れば解決すると思うよ

225:デフォルトの名無しさん
12/05/05 18:51:36.89
Excel VBA WEB連携術―2007/2003対応
ってのがあったけど、222の期待に答えられるものかどうかは知らん

226:デフォルトの名無しさん
12/05/05 22:17:25.08
>>222

それに手を出すレベルの人は(おそらく)すでに上級者。
参照設定できるものなら、参照設定してオブジェクトブラウザで
メソッド等にアタリをつけて検索and実験。
MSDNライブラリもチェック。

これで大抵は解決できる。


227:222
12/05/05 22:24:29.41
>>224
夜寝る前にベッドで本を読みながら勉強したいし
本のほうがページを順番に1方向だけに進めるし気楽なのですじゃ。
ネットの情報は、いちいちどこをクリックしたかとか、
どこをまだ読んでないかとか、この順番だと先に理解してないといけないことがらをまだ読んでなかったとか、
いちいち気にしないといけないし。
>>225
その本はamazonで低評価だし、目次みてもなんかいまいち。
>>226
そうか、自分は上級者だったか(笑)。
言ってることがよくわからないけどとにかくすごいですね。
特にWebのページからボタンを押してクエリをおくって
それででてきたデータをExcelに貼り付ける、という操作がかなり頻繁に使うんだけど
そういうのはできる?
もちろんクエリとなるデータはExcelの複数のセルのデータを送る。

228:デフォルトの名無しさん
12/05/05 23:26:37.76
>>227
やりたいことを実現するためにVBAを使う人じゃなくて
本を読んでVBAの勉強したい人だったのね
それならなおさらMSDNライブラリ読めばいい
紙がいいなら印刷すればいいしね

229:デフォルトの名無しさん
12/05/06 01:56:09.87
横レスだけどMSDNライブラリっていうのがあるのか。
勉強に良いサイトとか>>1にまとめてくれると嬉しいな。

230:デフォルトの名無しさん
12/05/06 04:18:22.14
>>227
226も言っている通りその辺はIEやOutlookの
COMオブジェクトを参照設定で使い回すだけだから
VB6の本やサイトでいい。


231:デフォルトの名無しさん
12/05/06 09:35:11.23
>>229
スレの趣旨が違う

232:デフォルトの名無しさん
12/05/06 19:05:41.23
エクセル2010でエクセルを終了させてもタスクマネージャーでみるとエクセルのプロセスが残ってしまいます。
状況は、ループである条件を監視し続けているAマクロを実行中に、別のブックのBマクロ(これはループ処理とかはしていません。)
を実行したのち、エクセルを終了させるとプロセスだけが残ってしまいます。
漠然とした説明しかできませんが、何か注意点とかないでしょうか。

233:デフォルトの名無しさん
12/05/06 19:39:08.83
注意点
漠然としない説明じゃなく、具体的な説明が出来るようになること

234:デフォルトの名無しさん
12/05/06 19:40:55.81
その問題が再現する最小限のコードを載せるんだ

235:デフォルトの名無しさん
12/05/06 20:36:28.07
なぜ漠然とした説明しかできないのか…

236:デフォルトの名無しさん
12/05/06 20:49:52.77
>>232>>176 とか >>166 のような釣りにしか見えなくなった。
勝手にやってくれ。

237:デフォルトの名無しさん
12/05/06 20:51:22.70
句点を付けるヤツは基本的に釣り

238:デフォルトの名無しさん
12/05/06 21:05:19.29
句点が、釣り、だと、されるなら、
肺活量の、小さい、私は、
どうやって、質問したら、いいのでしょう?

239:デフォルトの名無しさん
12/05/06 21:15:47.02
>>238
あ、ほ、は、気、に、す、る、な。

240:デフォルトの名無しさん
12/05/06 21:25:26.78
>>236
へ?か、っ、て、に、す、ね、て、ろ

241:デフォルトの名無しさん
12/05/06 23:41:23.61
句点が釣りだと言われて読点を連打するのがおもしろいという流れが理解できない

242:デフォルトの名無しさん
12/05/07 00:23:45.67
まぁまぁ、そうムキにならずに

243:226
12/05/07 01:05:50.77
>>227

>特にWebのページからボタンを押してクエリをおくって
>それででてきたデータをExcelに貼り付ける
>クエリとなるデータはExcelの複数のセルのデータ

基本的にはできるよ。
ただ、IEの処理やスクリプト言語の処理と、VBAの処理を同期
させなきゃいけない問題とか難儀な部分もあるけど。

244:デフォルトの名無しさん
12/05/08 12:06:06.06
エクセル2003で
ActiveSheet.ChartObjects(1).Activate
ActiveChart.SeriesCollection(1).Select

って、

ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Select

と書き換えるとエラーになるんだけど、SeriesCollection(1)はChartの下じゃない?
ヘルプ見ても書いてない。


245:デフォルトの名無しさん
12/05/08 12:19:42.73
>>244
URLリンク(msdn.microsoft.com)

246:デフォルトの名無しさん
12/05/08 12:32:28.69
ありがとう、さっぱり分からんw

247:デフォルトの名無しさん
12/05/08 12:41:54.32
>>244
ヘルプに載ってる

248:デフォルトの名無しさん
12/05/08 16:23:07.08
>>247
ありがとう。
ヘルプに載ってる?
SeriesCollectionで見てみたんだけどなぁ。
もう一度よく見てみる。

249:デフォルトの名無しさん
12/05/08 17:07:24.25
分かりました。
Chartで良かったです。
ヘルプに書いてある使用例を使って

Worksheets("sheet1").ChartObjects(1).Chart. _
SeriesCollection(1).Select

と、やってみた時にあらかじめグラフをアクティブにしておかないと
エラーになるのが分かっていなかったので、「親はChartじゃないのか?」
と、混乱してしまいました。

スレ汚しごめんなさい。


250:デフォルトの名無しさん
12/05/09 01:15:33.50
VBAで
セルをいっぱい選択してて
その範囲内で最初に出てくるセルだけに色を塗るにはどうすればいいですか?
例えば、

A B C A D
E C D A C

の2行5列の範囲を選択しててマクロを実行すると

[A][B][C]A[D]
[E] C D A C

の[]で囲った[A][B][C][D][E]の5つだけが色がかわるの。

251:デフォルトの名無しさん
12/05/09 01:26:12.21
ユーザーフォームのコンボボックスで躓いています。
Private Sub UserForm_Initialize()
MyArray1 = Array("うさぎ", "かめ", "ねこ", "犬", "鳥")
ComboBox2.List = MyArray1()
End Sub
とすると"実行時エラー9"インデックスが有効範囲にありません

が出ます。どう修正したらいいでしょうか?


252:デフォルトの名無しさん
12/05/09 04:00:26.58
>>250
なんかいい方法が思いつかないんで力業で

Sub a()
  With Selection
    For Each c In .Cells
      Set f = .Find(c, after:=.Cells(.Count))
      If c.Row = f.Row And c.Column = f.Column Then c.Interior.Color = vbGreen
    Next
  End With
End Sub

253:デフォルトの名無しさん
12/05/09 10:15:22.65
>>251
ComboBox2.List = MyArray1

254:250
12/05/09 10:42:21.22
>>252
素晴らしい。
できたじゃないか。

255:250
12/05/09 10:55:16.00
>>252
Findのafter:=はどういう意味?
省略したら左上から検索するはずなのにしないね。

256:デフォルトの名無しさん
12/05/09 13:39:21.68
>>255
Findメソッドの仕様で、検索開始セルは「最後にヒット」するから、左上のセルが最初にヒットして欲しい時は
最後(右下)のセルから検索をスタートしなきゃいけない

この手のプログラムを書く時、初心者が必ずひっかかるポイントの一つ

257:デフォルトの名無しさん
12/05/09 16:45:30.68
便乗ですが、指定された逆から検索するってこと?
もし、そうなら理由って何?

258:デフォルトの名無しさん
12/05/09 16:53:09.73
検索かけて見つかった順にセルアドレスをスタックするから

259:デフォルトの名無しさん
12/05/09 22:53:12.76
普通にエクセル操作で検索するときと同じようにヒットするようにしてあるだけじゃないのか

260:デフォルトの名無しさん
12/05/10 00:15:35.95
>>257
逆順じゃない
最後まで行くと最初に戻る

検索範囲がABCDEだった場合、AからスタートにするとBCDEAの順にヒットする
Bからスタートにした場合はCDEABの順にヒットしていく
Eから始めればABCDEの順にヒットするようになる

261:デフォルトの名無しさん
12/05/10 00:44:53.91
なんてためになるスレだw

262:デフォルトの名無しさん
12/05/10 10:28:53.46
ツールバーを動的に作成してるのですが、アイコンをFaseIdではなく自作のイメージにしたい場合はどうやるのでしょうか?
2003です。

263:デフォルトの名無しさん
12/05/10 11:38:59.60
>>262
多分Pictureプロパティのヘルプ読め載ってるはず
URLリンク(support.microsoft.com)

264:デフォルトの名無しさん
12/05/10 15:19:24.88
>>263
できました、ありがとうございます。

Picture = LoadPicture(imagefile)

265:デフォルトの名無しさん
12/05/11 14:10:41.73
うちのExcelVBAでWorkbooks.Addの呪文で新ブックを開くと
行と列が少ないブック(列256、行65535)になるんだけど
最新の行と列がたくさんあるブックを開くにはどうすればいい?


266:デフォルトの名無しさん
12/05/11 14:43:00.17
>>265
Excelのバージョンをあげる

267:デフォルトの名無しさん
12/05/11 15:11:24.43
>>266
金がかかるのでいやです。
他に方法はありますか?

268:デフォルトの名無しさん
12/05/11 15:12:16.51
ちなみにいまのExcelでもたくさん行と列があるブックは使えるのです。
なぜかVBAで開いたときに少ない形式で開きやがる。

269:デフォルトの名無しさん
12/05/11 15:20:48.25
>>268
予め開いておけば?

270:デフォルトの名無しさん
12/05/11 15:23:00.24
>>269
いやです。
ある条件のときしか開かないし、
そもそもそれ以上に別の理由で。

271:デフォルトの名無しさん
12/05/11 15:47:12.71
空のブックを保存しといて、必要な時にファイルコピーしてから開く

272:デフォルトの名無しさん
12/05/11 15:49:49.56
普通に開く分には問題ないんだよな
古いDLL参照してんじゃね
入ってる最新のDLLを内部で参照してそっから開いくという手段を提示してみる

273:デフォルトの名無しさん
12/05/11 16:02:31.20
これかな
kb/244167/ja
あとはレジストリ書き換えとか

274:デフォルトの名無しさん
12/05/11 16:38:09.57
わかんねえよ
日本語でしゃぶれ

275:デフォルトの名無しさん
12/05/11 18:59:01.39
ぺろぺろ

276:デフォルトの名無しさん
12/05/11 19:55:02.26
>>265
URLリンク(msdn.microsoft.com)(VS.80).aspx
旧フォーマットになる場合は、一時的に既定の保存形式を弄れってことらしいよ。

277:デフォルトの名無しさん
12/05/12 01:21:51.54
オートフィルタ色々やってみたけどだめだったので質問です。

以下のデータで今月誕生日の人がいるかを抽出したいです
※年月日の書式は「日付」です。



Aセル   Bセル

Aさん  1234年5月6日
Bさん  1234年5月17日
Cさん  1234年7月5日


    ↓

Aさん  1234年5月6日
Bさん  1234年5月17日

278:uy
12/05/12 01:55:53.41
色々って、何やったか位かけ

279:デフォルトの名無しさん
12/05/12 01:58:39.69
>>278
答える気が無いやつは黙れks


消えろ

280:デフォルトの名無しさん
12/05/12 01:59:19.16
>>278はどうせ知識がなくて答えられねーんだろうなw
悔しかったら答えてみろよクズがw

281:uy
12/05/12 02:02:17.14
>>280=>>279=>>277
どうせ色々どころか何もしてないんだろ?

282:デフォルトの名無しさん
12/05/12 02:11:18.61
>>279-280を質問者だと思ってる時点で糞コテ

283:デフォルトの名無しさん
12/05/12 08:17:47.46
>>277
=MONTH(B1)=MONTH(NOW())

284:デフォルトの名無しさん
12/05/12 09:46:36.43
>>283
VBAでお願いします

285:デフォルトの名無しさん
12/05/12 11:03:50.76
右側のセルにExcel関数で年月だけ引っ張り出せばいいだろ。

286:デフォルトの名無しさん
12/05/12 11:29:13.82
>>285
誕生日なので年は不要なんです

287:デフォルトの名無しさん
12/05/12 14:01:39.67
じゃあ、月だけ引っ張り出せば

288:デフォルトの名無しさん
12/05/12 16:24:18.99
オートフィルタだけでやりたいんです

289:デフォルトの名無しさん
12/05/12 16:46:42.33
オートフィルタだけでやりたいならスレチ

290:デフォルトの名無しさん
12/05/12 17:55:00.84
>>288
とりあえず「マクロの記録」(Alt, T, M, R)

291:デフォルトの名無しさん
12/05/12 18:00:43.15
作業列もVBAも使わずにオートフィルタだけって無理じゃね?

292:デフォルトの名無しさん
12/05/12 18:56:45.14
VBAでやりたいのにオートフィルタ以外使いたくない意味がわからない


293:デフォルトの名無しさん
12/05/12 19:18:33.55
URLリンク(www.cygnus-x1.net)

ExcelのVBAという便利なものを聞いて、ひょっとしたらと思い質問です。
上のWebサイトで、
「Synopsisの段落(Wordの段落じゃなく一般の段落の意味)」と「タイトル(赤文字に水色背景の行)」だけを
Word等の文書にコピペしてはりつけたいんだけど
それはExcelのVBAの機能を使ってできたりしませんか?
写真やらヘッダ・フッタやSynopsisの上のこまごましたデータは全部いらないです。

294:デフォルトの名無しさん
12/05/12 19:21:16.84
>>293
できなくはないけどExcelでやるべき作業じゃない

295:デフォルトの名無しさん
12/05/12 19:44:50.55
>>294
Excelでやるべき作業じゃないかも知れないが、それはお前が判断することじゃない

>>293
出来る
ワードのVBAでエクセルを開いてコピーも出来る
エクセルのほうで必要な部分を選択→コピー
ワードで貼り付け

ワードへの貼り付けを自動化するにはVBAで連携する必要がある

296:デフォルトの名無しさん
12/05/12 20:02:27.66
>>288
シリアル値で判定できなかったっけ?

297:デフォルトの名無しさん
12/05/12 20:38:02.75
>>296
シリアル値は1900年を基準としてるので
1234年みたいな過去の日付は扱えないよ

298:293
12/05/12 20:56:09.19
>>295
ありがとうございます
できるのですね!
どうやるか教えていただけないでしょうか?

299:デフォルトの名無しさん
12/05/12 20:59:56.49
Excelで日々数値を入力していくとどんどん下へ長くなり
たまってくると最新情報を入力するために毎回延々とスクロールさせなければいけなくなるのですが
最新を上に入力して下へずれるとか逆にすることは出来ないのでしょうか?!

300:デフォルトの名無しさん
12/05/12 21:15:55.18
>>299
1行目に行を挿入→挿入した行に入力


301:デフォルトの名無しさん
12/05/12 21:23:32.31
>>298
>>295のとおり
1.ワード連携のためインスタンスを実装
2.エクセルで、コピーに必要なところを選択
3.ワードに貼り付け
4.インスタンスの破棄
VBA ワード でググれ

>>299
一番上を空白にしておいて、入力が終了したら全部一段ずらして下にコピーする

入力時に一番下を表示するのが負担かからなくていいんじゃね

302:デフォルトの名無しさん
12/05/12 21:42:06.56
>>299
VBAでやるまでもなく[Ctrl]+[End]を押せばいいと思うよ

303:デフォルトの名無しさん
12/05/12 22:11:16.37
>>300
>>301
サンクス!
しかしながら、、表が5つ横並びにならんでいて
それぞれがランダムに増えていく感じでして、行で空白を挿入すると増えない表が
空白になってしまうのですが、やはりそれぞれの表をタブで分けるしかないか。、、それぞれ見比べたいのでスクロールは我慢か、、w

304:デフォルトの名無しさん
12/05/12 22:16:06.25
>>303
Ctrl+↓で自動的に最後に飛ぶ
次の列でデータが少なくて現在位置より上に戻りたい時は、カーソルをその列に移動してからCtrl+↑
もっと下へ行きたい時はCtrl+↓

305:299
12/05/12 22:20:44.05
>>304
ありがとうございまますm(_ _)m

306:293
12/05/12 23:05:54.92
>>301
ぅ~ん
さっぱり分かりません(><)

307:デフォルトの名無しさん
12/05/13 00:56:07.83
Excelのセルで入力したあと、セルの焦点をそのいま入力したセルのままにすることはできますか?
Enterを押すと下のセルにうつりますし、Tabを押すと右のセメにうつるので困ります。
かといってそのままにしておくと登録しておいたショートカットでそのセルに対してマクロが実行できません

308:デフォルトの名無しさん
12/05/13 00:59:01.45
やり方が間違ってる

309:デフォルトの名無しさん
12/05/13 00:59:10.92
>>307
どんなマクロかしらんけど前のセルに戻す動作もマクロに入れればいいんじゃないの

もしくは

オプションで「入力後にセルを移動する」のチェックを外す

310:デフォルトの名無しさん
12/05/13 01:01:20.19
>>309
上のセルをマクロ対象にしろと申すか?
入力してマクロを実行するパターンと
すでに入力されてるセルを選択してマクロを実行するパターンがあり
後者の場合はわざわざ対象セルの下のセルを選択しないといけなくなり
そりゃマヌケだろが?

あるいは

オプションを使うとか、本気で申してるのか?
その方法これまで30年もExcelをさわってきた無意識のセル入力感覚を破壊することになるぞ。

311:デフォルトの名無しさん
12/05/13 01:03:08.79
だから言ってるだろ
やり方が間違ってる

間違ってるやり方を質問して出来るようになっても
タダの有害だ

312:デフォルトの名無しさん
12/05/13 01:13:37.02
だから言ってるだろ
やり方が間違ってる

間違ってるやり方を質問して出来るようになっても
タダの有害だ

313:デフォルトの名無しさん
12/05/13 01:14:36.88
大事なことなので二回(ry

314:デフォルトの名無しさん
12/05/13 09:51:37.74
VBAの勉強を始めようと思うのですが、
効率の良い勉強の仕方を教えて下さい!

315:デフォルトの名無しさん
12/05/13 09:55:12.38
まず、にちゃんなんかみるのをやめる。

316:デフォルトの名無しさん
12/05/13 10:52:29.95
>>314
VBAは目的じゃなくて手段
まず何をやりたいのかを書け

317:デフォルトの名無しさん
12/05/13 12:05:23.38
VBAが目的でもいいじゃない

318:デフォルトの名無しさん
12/05/13 12:47:35.30
>>314
リファレンスマニュアルを丸暗記すれば勉強終わり

319:デフォルトの名無しさん
12/05/13 19:49:06.61
>>317
じゃあまずアセンブラか、それこそプリント基板からだな!

320:デフォルトの名無しさん
12/05/13 21:52:34.49
核融合で水素からシリコン原子を作る

321:デフォルトの名無しさん
12/05/14 01:57:19.36
Range("A1").End(xlDown)
でデータの入力されている最終行を取得して
その1行下にデータを入力しようとすると
何も入力されてない時にエラーになります。
なにかいい知恵はありませんか?

322:デフォルトの名無しさん
12/05/14 02:23:20.40
開始セルから下へ行くんじゃなく
バージョンの最終セルから上に行くようにすればいい

323:デフォルトの名無しさん
12/05/14 16:55:28.00
2003でも2010で実行できるマクロが2007でダメってことある?

324:デフォルトの名無しさん
12/05/14 17:02:17.13
動作保証しないか、するならテストしろ

325:デフォルトの名無しさん
12/05/14 17:04:50.73
>>324
誰もそんなこと聞いてない。

326:デフォルトの名無しさん
12/05/14 17:20:05.82
>>324
分からないならしゃしゃり出て来るなカス!!

327:デフォルトの名無しさん
12/05/14 17:28:15.89
>>324
動作条件とか記載するにきまってるだろ。
そのうえで聞いてるんだろ。
馬鹿は引っ込んでろ。

328:デフォルトの名無しさん
12/05/14 17:28:31.83
あるかどうかを聞いてるんだ
答えは二通りしかないだろ
日本語も読めないカスは書き込むな!

329:デフォルトの名無しさん
12/05/14 17:33:41.49
面白がって煽るのやめてw
2003でマクロ書いて、テストは2003と2010でやった。
それなら2007でも問題ないだろうと思って。
動作保証は、あくまでも2003と2010。
客先にもそれしかないから。
たまたま動かしたPCに2007が入っていて、動かなかったって連絡来たから聞いた。


330:デフォルトの名無しさん
12/05/14 17:36:07.46
あるんじゃん


リボンとかそこらへんか?

331:デフォルトの名無しさん
12/05/14 17:54:01.42
2007で動かなかったという現実があるのに、なんで「ありますか?」とか聞くのだ、この馬鹿は

332:デフォルトの名無しさん
12/05/14 20:48:49.86
ネタスレにすんな。
せっかく有益なスレなのに

333:デフォルトの名無しさん
12/05/14 21:52:02.46
悪い、動かんと言われたけど、実際の環境というか操作方法とか確認できないのよ。
だから、聞いたのよ。


334:デフォルトの名無しさん
12/05/14 21:52:37.26
>>331
馬鹿は出てこないでくれ

335:デフォルトの名無しさん
12/05/14 22:19:00.30
>>333
んで、そんなこと聞いてどうするの?
実際の環境も操作方法も確認できなくて、2ちゃんでできるとかできないとか回答もらってどうするの?
いまいち質問の意図が読みとれない

336:デフォルトの名無しさん
12/05/15 00:30:32.23
>>333
そんなもん99%は操作ミスかセキュリティ設定が悪くてマクロが動いてないだけ
まずは客先へ行ってちゃんと知識のあるやつが状況を把握してこい

337:デフォルトの名無しさん
12/05/15 00:33:00.36
>>336
確認できないって書いてるの読めない?

338:デフォルトの名無しさん
12/05/15 00:38:19.48
確認できないってのは、確認するのが「不可能」じゃなくて、「めんどくさい」だろ
デバッグってのは結局のとろこ>>336に尽きるんだが、それをしないなら有意な質問にならないし、まともな回答も出来ないんだよ

339:デフォルトの名無しさん
12/05/15 01:24:01.74
小学生知能にマジレスしてやんなよw

340:デフォルトの名無しさん
12/05/15 01:46:55.88
確認できないってことは相手は言語を超越した何かか?w

341:デフォルトの名無しさん
12/05/15 02:26:50.55
>>340
それだと受注もできんだろ

太陽系の外へ向かったロケットか何かなんだよ、きっと

342:デフォルトの名無しさん
12/05/15 03:20:17.30
2007でなくなって2010で復活した変更点があればそれ絡みだろうけど
それっぽいものは見つけられんなぁ

環境に依存する何かを使ってるんじゃないかと


343:デフォルトの名無しさん
12/05/15 14:54:57.82
>動作保証は、あくまでも2003と2010。
>客先にもそれしかないから。
>たまたま動かしたPCに2007が入っていて

部外者が勝手に動かしたのか?恐ろしい職場だな

344:デフォルトの名無しさん
12/05/15 19:54:52.28
ユーザーフォームで使用者に必要事項を入力させているのですが
ComboBoxで何も選択されていないことが想定され
その場合のエラー処理で困っています。
ユーザーフォームは表示したままでCommandButton
をクリックする前の状態に出来ないでしょうか?

345:デフォルトの名無しさん
12/05/15 20:07:07.92
if combobox1.value="" then exit sub

346:デフォルトの名無しさん
12/05/15 21:10:08.88
>>345
あら、そんなに単純だったんですね
ありがとうございます。


347:デフォルトの名無しさん
12/05/15 21:51:02.47
for~nextで繰り返し処理している中で
inputboxで数値を入力させているのですが、
inputboxのキャンセルをクリックしたときに
inputbox以外の処理はカウント完了するまで続けたいのですが
できませんか?
また出来るなら方法をご教示下さい。

348:デフォルトの名無しさん
12/05/15 22:09:07.15
Sub test()
For i = 1 To 5
a = InputBox("hoge")
If a = "" Then
MsgBox "キャンセルされたよ"
Else
MsgBox a
End If
b = b + 1
Next
MsgBox b & "回ループしたよ"
End Sub

349:デフォルトの名無しさん
12/05/15 22:13:05.89
>>333
その位で確認してから質問しろ

350:デフォルトの名無しさん
12/05/15 22:38:17.64
>>348
それだと毎回inputboxが出てくるので
一度キャンセルされるとそれ以降はinputboxを
とばして残りの処理をしたいのです。


351:デフォルトの名無しさん
12/05/15 22:46:01.10
exit for すりゃいいじゃん

352:デフォルトの名無しさん
12/05/15 22:49:35.84
>>351
それだと残りのFor~Next内の処理ができないです。


353:デフォルトの名無しさん
12/05/15 23:04:09.77
Sub test()
Dim flag As Boolean
For i = 1 To 5
If Not flag Then a = InputBox("hoge")
If a = "" Then flag = True
b = b + 1
Next
MsgBox b & "回ループしたよ"
End Sub

354:デフォルトの名無しさん
12/05/15 23:17:15.40
>>353
ありがとうございます。
完璧です!

355:デフォルトの名無しさん
12/05/16 03:21:47.17
例えばあるシートの、1行目の、1列から10列目までに色々な数値が書かれていて
最小値だったり、最大値だったりを持つ数値の列数を算出していきたいんですが

とりあえず以下のようなやり方で出来るんですが

最小値 = WorksheetFunction.Min(Range(Cells(1, 1), Cells(1, 10)))

最小値をもつ列  = Range(Cells(1, 1), Cells(1, 10)).Find(最小値).Column



何か1行ぐらいのスッキリした文で求める方法ないでしょうか?
というのは、行の部分を変数化して、何千行、何万行と作業やっていくので
負担の無い早そうなスピードがのりそうな文があればそのほうがいいんですが
どなたがご存知でしょうか?

356:デフォルトの名無しさん
12/05/16 08:45:44.06
ねえよ

見た目だけそうなればいいなら、サブモジュール作る

357:デフォルトの名無しさん
12/05/16 09:02:26.45
>>356
ありがとうございます>>355でもあんまり速度は悪くなさそうですね。

これでやってみます。もしそういうのがあれば、知りたいなと思いました。

358:デフォルトの名無しさん
12/05/16 09:17:27.03
だめだオブジェクト指向が苦手だ
Cで慣れすぎたせいで効率悪い

359:デフォルトの名無しさん
12/05/16 09:57:16.22
>>358
単に大規模システムの構築に慣れてないか、
小規模なものを無理矢理小分けにして無意味にごっちゃにしてるかのどっちかじゃないの

360:デフォルトの名無しさん
12/05/16 10:31:06.74
P10に=((1/(COS(RADIANS(N10))))-1)*AI10*AJ10*X10/V10/1000
O10に=AK10/(SIN(RADIANS(N10)))という式が入力されていて
P10=O10のときのN10の値を求めたいんですがどういうコードを書けば
いいのかわかりません。

361:デフォルトの名無しさん
12/05/16 10:38:16.38
>>360
Function GetN10()
If Range("P10") = Range("O10") Then
GetN10 = Range("N10")
Else
GetN10 = 0
End If
End Function

362:デフォルトの名無しさん
12/05/16 11:43:29.77
>>361
ありがとうございます。
でもそれを使ってどうしていいのかわかりませんでした。

363:デフォルトの名無しさん
12/05/16 12:06:29.58
へえ、あんたなかなかやるじゃん

364:デフォルトの名無しさん
12/05/16 17:10:25.84
失礼します。
今プログラムを作っていて、
ある列に数字をうっていてある条件を出していくようなプログラムを作っているのですが、(ここはあまり関係ない)
ActiveXコントロールを押すと、行のBの列の数字を。
そして次にまた押すと、行のCの列の数字を、、、というように
やっていきたいのですが、これをするためには、
例えば、iだとかjだとを一回格納する必要があります。

例えば、
Private Sub CommandButton1_Click()
dim i as integer
i=0
i=i+1



End Sub

プログラムが終了しても、このiを保存しておきたいのです。
どのようなやり方がありますか?

365:デフォルトの名無しさん
12/05/16 17:33:52.80
セルに書く
外部ファイルに書く
ソースコードのコメントに書く
コントロールに書く

366:デフォルトの名無しさん
12/05/16 17:36:40.83
まぁセルのどっかに保存が一番簡単だな。
見た目云々をいうなら白文字で代入とか。

ところで、例えがiを必ず初期化しているせいで、逆に分かりづらくなっている気がするんだが

367:デフォルトの名無しさん
12/05/16 17:40:35.92
ブック名やシート名っていう手もあるぞい

368:デフォルトの名無しさん
12/05/16 20:39:35.86
>>360
ゴールシークは使えないの?

369:デフォルトの名無しさん
12/05/16 20:44:24.26
というか、ホントにプログラムが終了しても保存してないとダメなのか?
Subを抜けても保存されてるんだけで良いんじゃないのか?
それならSubの外で変数定義するか、Staticな変数使えばいいだけだが

370:デフォルトの名無しさん
12/05/16 20:55:08.71
釣られすぎw

371:デフォルトの名無しさん
12/05/16 22:24:58.52
中国のGDP、実は日本を超えてなかった
スレリンク(poverty板)


中国経済、予想を超える急減速か

世界第2位の経済大国の舵(かじ)取り役に来年就任する人物は、
中国の国内総生産(GDP)統計に対する疑念をうっかり漏らした。
中国の公式GDP統計は「人為的」で当てにならないと語ったのは李克強氏だ。

李氏の評価が正しければ、中国経済はGDP統計がこれまで示唆してきたよりもかなり厳しい苦境に陥っている。
電力や鉄道貨物、銀行融資をはじめ、ここ数日で発表された注目度の低い統計は、
いずれも経済活動の急激な落ち込みを示しており、政策立案者たちに不意打ちを食らわせたようだ。

最近の悲惨な統計を受け、中央銀行は12日、融資拡大を促すために市中銀行の預金準備率を引き下げた。
しかし、金融危機後の大規模な低利融資と政府支援による投資の結果、中国政府には今回、
限られた武器しか残っていない。一方で、インフレ再燃と国営銀行の不良債権への懸念が高まっている。

URLリンク(www.nikkei.com)




372:デフォルトの名無しさん
12/05/16 23:05:47.74
超えててくれたほうがいろいろありがたいんだが

373:デフォルトの名無しさん
12/05/19 16:01:40.27
うん、愚図愚図してないでとっとと超えろと言いたい

374:デフォルトの名無しさん
12/05/19 16:11:52.78
馬鹿には無理

375:デフォルトの名無しさん
12/05/19 18:47:15.19
VBAを使って作業しまくったらPCが異常に重くなるんです。
最近会社で効率のため自分用VBAをいっぱいつくるようになってからの症状なので
VBAが原因なのは明らかです。
なにかメモリを解放しないといけないのですかな?
どうか対策のことでアドバイスをお願いできますでしょうか?

376:デフォルトの名無しさん
12/05/19 18:51:19.39
>>375
まず、タスクマネージャでどのプロセスが CPU やメモリ食ってるかを見てみなよ。

377:デフォルトの名無しさん
12/05/19 18:55:17.89
動的配列を使ったら最後に必ず erase するとか

378:デフォルトの名無しさん
12/05/19 18:58:16.27
>>375
どんなコード書いてるのかわからないのでアドバイスしようがないと思うけど・・・?
PCが重いってのは何が重いの?ディスクI/O?CPU?メモリアクセス?
VBAが原因なのは明らかっていう根拠は何?

379:デフォルトの名無しさん
12/05/19 20:27:42.40
EXCEL終わらせても重いままだったらVBAは無関係だと思っていいが

380:375
12/05/19 20:29:04.21
Excel終わらせたら、もちろん軽いパパです。

381:デフォルトの名無しさん
12/05/19 20:38:35.31
>>380
じゃあVBAのロジックがクソなんだろw

382:375
12/05/19 20:51:45.02
そのとおり糞だからこそその改善策を聞いているのですが・・・

383:デフォルトの名無しさん
12/05/19 20:55:33.26
VBAでオートフィルタをさせているんですが
そのフィルタをする項目として、Selectionで囲ったセルを指定してます。
criteria1:=Array(Selection)
みたいな感じです。

しかしこのselection、1行の横長だとうまくいくんですが
1列の縦長だとエラーが出て「エラいこっちゃ」になります。

縦でselectionしたときも、複数行・列にわたってselecionしたときにその内部のセル全部でフィルターしたいときには
どういうコードを書けばいいですか?

384:デフォルトの名無しさん
12/05/19 21:11:24.37
>>382
だから早くその糞コードを見せろよ

385:デフォルトの名無しさん
12/05/19 21:12:19.84
>>383
わからなければとりあえず「マクロの記録」(Alt, T, M, R)

386:デフォルトの名無しさん
12/05/19 21:26:08.03
>>382
重い処理を何回もループさせるとCPU使用率がヤバくなるよね。それじゃね?。sleep入れてみれば?。

387:デフォルトの名無しさん
12/05/20 03:39:29.77
>>375
適当なタイミングでDoEventsかませ


388:デフォルトの名無しさん
12/05/20 11:03:41.98
データを他のブックに貼り付けて終わらせるのがあるんですけど、
下のメッセージが出るんでこれを出さないようにする方法とかないですか?

クリップボードに大きな情報があります。この情報をほかのプログラムに貼り付けられるようにしますか?


389:デフォルトの名無しさん
12/05/20 11:10:30.81
>>388
Application.CutCopyModeにFalseをセットする。

390:デフォルトの名無しさん
12/05/20 11:12:45.84
Application.DisplayAlerts = False

391:デフォルトの名無しさん
12/05/20 15:00:31.73
sn = Array("りんご", "ゆず", "かぼす")
For ii = 1 To 3
Set ws = Worksheets(sn(ii))
Set tmp = ws.Cells(Rows.Count, 1).End(xlUp).Rows
ws.Range(Cells(1, 1), Cells(tmp, 10)).Select
Next ii
とするとRangeのところで実行時エラー1004が出ます。
どうしたらいいでしょうか

392:デフォルトの名無しさん
12/05/20 15:14:26.21
>>391
tmpには正しい(意図している)値が入ってるの?

393:デフォルトの名無しさん
12/05/20 15:27:12.60
>>392
すこし修正して入っているのを確認しましたが、
今度はRangeクラスのSelectメソッドが失敗しました。
のエラーが出ました。

394:デフォルトの名無しさん
12/05/20 15:56:30.31
>ws.Range(Cells(1, 1), Cells(tmp, 10)).Select
CellsがActiveSheet見てるんじゃないかと予想


395:再質問です
12/05/20 16:00:22.22
VBAでオートフィルタをさせているんですが
そのフィルタをする項目として、Selectionで囲ったセルを指定してます。
criteria1:=Array(Selection)
みたいな感じです。

しかしこのselection、1行の横長だとうまくいくんですが
1列の縦長だとエラーが出て「エラいこっちゃ」になります。

縦でselectionしたときも、複数行・列にわたってselecionしたときにその内部のセル全部でフィルターしたいときには
どういうコードを書けばいいですか?

396:デフォルトの名無しさん
12/05/20 16:04:09.76
>>395
出たエラーとコードを晒せ

397:デフォルトの名無しさん
12/05/20 16:05:34.96
>>389
thxですm(__)m

398:デフォルトの名無しさん
12/05/20 16:06:49.95
>>394
正解でした。
しょうもないミスですんません・・

399:デフォルトの名無しさん
12/05/20 16:22:50.57
>>277
ActiveSheet.Range("B1").AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(1, "31/05/2012")

400:395
12/05/20 16:25:19.61
>>396
恥ずかしいゎ

401:デフォルトの名無しさん
12/05/20 17:28:16.42
>>395
わからなければとりあえず「マクロの記録」(Alt, T, M, R)

402:デフォルトの名無しさん
12/05/20 18:36:04.74
>>395
こんな感じかな

Sub test()
Dim V()
Dim c As Range
Dim n As Long

ReDim V(1 To Selection.Count)

For Each c In Selection
n = n + 1
V(n) = c.Value
Next

Range("A1").AutoFilter Field:=1, Criteria1:=Array(V), Operator:=xlFilterValues
End Sub

403:395
12/05/20 18:38:22.69
>>402
すばらしい!
それこそわたしが探し求めてたものです。
ありがとうございます。

しかしマクロ記録を勧める人は何だったんだろ。ピントはずれ。

404:395
12/05/20 18:40:35.55
この配列を使い、それをvarient型で使う、というのはどういうしくみになってるんだろ。
使い方をまとめてくれてるサイトみたいなのない?

あとFilter機能で使ったように、Arrayの使い方も、
今後の活用のために、まとめサイトみたいなのない?

405:デフォルトの名無しさん
12/05/20 20:22:49.49
>>402
Criteria1:=V でよっかた


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