1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ] ・まじめにExcelの機能を追及してみようと思う奇特なひと ・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと ・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと ・とにかく漏れにこんな仕事まわすなと怒っているひと そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです 前スレ pc11.2ch.net/test/read.cgi/tech/1168308855/
75 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 12:56:17 ] >>72 とりあえず重複なんか フィルタ使えばいーだろ わからなきゃ「Excel フィルタ 重複」とかでググれ
76 名前:デフォルトの名無しさん [2007/06/01(金) 13:04:55 ] >>74 83265 2007/5/29 20:00 17.206 41.677 * 83267 2007/5/29 20:00 17.206 41.677 * 83268 2007/5/29 20:10 17.162 41.635 83269 2007/5/29 20:20 17.157 41.638 83271 2007/5/29 20:30 17.162 41.642 83273 2007/5/29 20:40 17.147 41.625 83275 2007/5/29 20:50 17.153 41.637 ** 83277 2007/5/29 21:10 17.16 41.645 ** I I I I I の値ごとにセルが分かれています。 データによってセルが増えるデータもあるのです。 最初のは整理番号なのでやはりあったほうがよいです。
77 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 13:24:30 ] MyDate = Format(Sheets("Sheet1").Cells(GYOU1, 1), "mm/dd/yy") Sheets("Sheet1").Cells(GYOU1, 1) = "20" & MyDate
78 名前:デフォルトの名無しさん [2007/06/01(金) 14:15:30 ] >>76 どっちの整理番号を残すとかは考えずにいきます. このスレ的には問題あるかもしれないけど,一応動くので. Private Sub Sample() Dim targetCell As Range Dim date1 As Date,date2 As Date,date3 As Date Dim intervalMin As Integer Set targetCell = Range("B1") ←最初に日付が入っているセル Do Until targetCell.Cells(2,1)="" date1=targetCell+CDate(targetCell.Cells(1,2)) date2=targetCell.Cells(2,1)+CDate(targetCell.Cells(2,2)) interval = DatePart("n",date2-date1) If interval=0 Then Rows(targetCell.Cells(2,1).Row).Delete ElseIf interval>10 Then Rows(targetCell.Cells(2,1).Row).Insert date3=DateAdd("n",10,date1) targetCell.Cells(2,1)=Format(date3,"yyyy/M/d") targetCell.Cells(2,2)=Format(date3,"hh:mm") End If Set targetCell=targetCell.Cells(2,1) Loop End Sub
79 名前:78 [2007/06/01(金) 14:21:54 ] 4行目,Dim interval As Integerの間違い この場合,重複している時間のデータは2番目のデータが消える.
80 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 14:24:59 ] >>64 Sub NURUPO() Sheets("Sheet2").Range("A1:E65536").ClearContents LastRow = Sheets("Sheet1").Cells.SpecialCells(xlLastCell).Row GYOU2 = 1 For GYOU1 = 1 To LastRow If Sheets("Sheet1").Cells(GYOU1, 3) <> Sheets("Sheet1").Cells(GYOU1 + 1, 3) Then For RETU = 1 To 5 Sheets("Sheet2").Cells(GYOU2, RETU) = Sheets("Sheet1").Cells(GYOU1, RETU) Next RETU GYOU2 = GYOU2 + 1 End If If Sheets("Sheet1").Cells(GYOU1 + 1, 3) - Sheets("Sheet1").Cells(GYOU1, 3) >= 0.006945 Then GYOU = Fix((Sheets("Sheet1").Cells(GYOU1 + 1, 3) - Sheets("Sheet1").Cells(GYOU1, 3)) / 0.006944) GYOU2 = GYOU2 + GYOU - 1 End If Next GYOU1 End Sub
81 名前:デフォルトの名無しさん [2007/06/01(金) 14:32:00 ] >>78 さん。 わざわざありがとうございました。動きました。 しかし、わたしの方の説明が悪く…。 83277 2007/5/29 21:10 17.16 41.645 I I I I I ではなく 83277 2007/5/29 21:10 17.16 41.645 I I I I でした。日付と時刻は同一セルです。 申し訳ないです。見捨てずお願いします。
82 名前:78 [2007/06/01(金) 15:05:11 ] >>81 それを早く(ry そっちの方が簡単だから。 Private Sub Sample() Dim targetCell As Range Dim date1 As Date, date2 As Date, date3 As Date Dim interval As Integer Set targetCell = Range("B1") 'Range("B1")の所は最初の年月が入っているセル Do Until targetCell.Cells(2, 1) = "" date1 = CDate(targetCell) date2 = CDate(targetCell.Cells(2, 1)) interval = DatePart("n", date2 - date1) If interval = 0 Then Rows(targetCell.Cells(2, 1).Row).Delete ElseIf interval > 10 Then Rows(targetCell.Cells(2, 1).Row).Insert date3 = DateAdd("n", 10, date1) targetCell.Cells(2, 1) = Format(date3, "yyyy/M/d hh:mm") Set targetCell = targetCell.Cells(2, 1) Else Set targetCell = targetCell.Cells(2, 1) End If targetCell.Select Loop End Sub
83 名前:78 [2007/06/01(金) 15:09:14 ] 下から3行目のtargetCell.selectはあってもなくてもいい。 ちなみにこれは同時刻だったらあとのデータが一緒でもそうでなくても 消す。時刻以外の値も重複していないといけないのなら>>80 さんのを参考に。 で、念のためシートをコピーしてそのシートで試したほうがいいよ。 マクロの画面でF8キーを押していくと動作をその都度動きを確認できる。 その場合はtargetCell.selectはあったほうがいいけど。
84 名前:デフォルトの名無しさん [2007/06/01(金) 15:22:19 ] >>78 ありがとうございました。しっかり動きました。 今までは、一時間に144データなので 隣の列に1〜144を貼り付けて目で追ってました。 ホント感謝します。ペコリ。 >>80 さんもありがとうございます。 次への参考とさせてもらいます。
85 名前:デフォルトの名無しさん [2007/06/03(日) 10:45:26 ] いつもお世話になっています。 >>78 さん、快適に動いています、 が、少し問題が出ました。 パターン1 84017 2007/6/1 9:50 17.111 41.619 84032 2007/6/1 12:00 16.977 41.501 分が連続していたらここは認識してくれない。 パターン2 84090 2007/6/1 16:50 17.056 41.605 2007/6/1 17:00 84099 2007/6/1 18:10 17.206 41.71 時間以上の欠落は無視する。 です。もしよろしければ教えてください。お願いします。
86 名前:78 [2007/06/03(日) 13:19:43 ] >>85 休日にお疲れです。 えっと、>>82 の「interval = DatePart("n", date2 - date1)」の部分を 「interval = DateDiff("n", date1, date2)」に変えてください。 少なくとも俺のパソコンではうまくいってる。 ちょっとミスってしまった。スマソ。
87 名前:デフォルトの名無しさん [2007/06/03(日) 16:52:49 ] >>78 さん 重ね重ねありがとうございます。 ばっちり動きました。がっつり空いたデータ間に あっというまに行が空けられる所を見ていると、 とてもうれしげです。 ありがとうございました。ペコリ。
88 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 18:58:35 ] すいません。質問です。 Linuxの改行コードを記述する方法はないでしょうか。 Linuxが出力したcsvファイルをWindows(excel)でFSOを用いて 加工しているのですが、改行コードが異なるようで、 読み込んで別のファイルに出力するとサイズが変わります。 excelで加工後、ファイルによってはもう一度Linuxに戻すため、 できればLinuxの改行コードを挿入したいのですが、方法が ありましたら教えてください
89 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:17:43 ] >>88 日本語とか入ってたら文字コード自体も変換しないとだめなんでは? 変換はlinuxのnkfなどでできる
90 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:24:51 ] LinuxだとLFかな? WriteLineを使わずに Fso.Write(string & vblf) とするとか。
91 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:25:47 ] 改行コードはWinの方が1バイト多いからLinuxなら読めるでしょ 余分なコードつきで
92 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 14:34:37 ] すいません、ちょっと質問なんですが、EXCEL2007ってFileSearch使えないんですか?
93 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 17:53:35 ] マクロ記録してみれば?
94 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 01:06:41 ] 透過画像(GIF)を表示させてデスクトップとかフォームの下が見えるようにしたいんですが、 フォームにGIFを表示させても単にフォームを透過するだけで、意図した表示ができません。 要するにフォーム自体を透過させる必要があるんだと思いますが方法が分かりません。 どなたかご教授願います。
95 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 01:46:31 ] >>94 シェイプでやったらどうでしょう 今から変更は大変だろうけど やり遂げた達成感はかなり得られるでしょう
96 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 06:51:22 ] 他のドロー系ソフトを使ってGIF→WMFもしくはEMF化すれば大丈夫か。 メタファイル系ならオートシェイプと同じ扱いになるので 試しに「GIF WMF 変換」や「GIF EMF 変換」でぐぐってみたら フリーソフトが結構あるな。
97 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 16:18:34 ] APIがあるんだけど難しいよ
98 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 21:38:45 ] >>95-97 シェイプが何かすらわからないド素人ですが、何から始めたら良いかも 分からないと言う状況だったのでググって探す取っ掛かりになりました。 時間は掛かると思いますが挑戦してみます。
99 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 10:27:05 ] ググってもわかりませんでした。教えてください。 テキストに AA a: 01 b: 01,02,03,04 c: AB a: 01,02 b: c:01 ・ ・ ・ ・ と書いてあるものがあります。 AA,ABともに、aの後に続く数字が全部でいくつあるのが、 bの後に続く数字がいくつあるのかという風に抜粋して、 数えた数字をエクセルに書き換えたいのですが どうもがいてもわかりません。 どなたかおしえていただけませんでしょうか? 説明下手でごめんなさい。
100 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 12:02:43 ] >>99 もう少し具体的なテキストと、その場合の要求する結果のサンプルをよろしく。
101 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 12:56:28 ] Excel関係なく、単純なテキストファイル解析でしょ。 単にその結果をExcelシートに出力するってだけの話なので、セルへの代入以外はVBAの分野じゃないよな。>>16 ということで、このスレの範疇の部分だけ答えると、セルへの代入は、代入するセルのRangeオブジェクトに対して 「.Value = 代入値」ですよ、ってことで終わりだな。あとはスレ違いなのでよろしく。 他の人にも言っておくが、Excel付属のVBAでやるにしても、Excelのインスタンス使わずにVBScriptでもVB6でも出来るようなことは、 VBA = [VB]言語による[A]pplication(Excel)操作 の分野ではなく、VB言語の分野なので、ここではスレ違いになるってことを覚えておいてね。 >>1 に書いてある通り、VBA分野の話ならどんな事情でVBA使ってようと構わないけど、VBAの分野じゃないことをあえてVBAでやってるだけの奴はNGね。
102 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 13:03:14 ] 頭固いなぁ
103 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 13:10:35 ] いや、そうでもないか
104 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 13:11:12 ] >>99 まずテキストのまま正規表現使って全ての数字を消すと AA a: b: ,,, c: AB a: , b: c: のようになる エクセルにコピーして区切り文字を":"にすると AA a| b|,,, c| | AB a|, b| c| | とセルが分かれ後は","の数を数えて+1する関数をVBAで 作ればOK
105 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 14:43:43 ] >>104 それじゃ最初から数字がない場合と 数字が一つだけでカンマなしの 区別つかなくね?
106 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 17:49:21 ] >>105 それではこんな感じで a:->:に変換 [a-z]:->: エクセルにコピーして区切り文字を":"にすると |01 |01,02,03,04| | |01,02| |01 | Sheet2に =CountData(Sheet1!A1) =CountData(Sheet1!A2) ドラッグして必要なとこまで埋める 関数 Function CountData(a As String) sa = Split(a, ",") b = UBound(sa) If b < 0 Then CountData = 0 Else CountData = b + 1 End If End Function
107 名前:デフォルトの名無しさん [2007/06/10(日) 18:48:31 ] Vista Ultimate, Excel2007です。 コントロールのボタンを作成(貼付け)したところ、 マクロ名を入力するダイアローグが出てきて、マクロ名を入力しました (そのボタンに対応する処理のマクロを事前に作っていたので)。 その後、TextBoxの処理をする必要が出てきたため、 Private Sub CommandButton1_Click()の編集画面を表示するために 開発→デザインモードをクリックして、ボタンをクリックしたのですが Private Sub CommandButton1_Click()の編集画面が表示されません。 どういう操作をすれば Private Sub CommandButton1_Click()の編集画面が表示されるのでしょうか。 よろしくお願いします。
108 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 00:57:26 ] 複数列のセルをフーリエ解析したいのですが、 A列からD列まで一列一列手動でやってマクロを記録したら下記のようになったのですが、 これをA列からIV列まで一気に行いたい場合にはどうまとめれば良いですか? Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$A$1:$A$256") _ , ActiveSheet.Range("$A$258"), False, False Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$B$1:$B$256") _ , ActiveSheet.Range("$B$258"), False, False Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$C$1:$C$256") _ , ActiveSheet.Range("$C$258"), False, False Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$D$1:$D$256") _ , ActiveSheet.Range("$D$258"), False, False End Sub
109 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 01:57:51 ] 普通にやればいいだけだよ
110 名前:デフォルトの名無しさん [2007/06/11(月) 07:58:33 ] VBAでFREQUENCY関数を使いたいのですが、 キーボード入力の時の”配列数式の入力”は、 VBAでは、どう記述すれば良いのでしょうか。 よろしくお願いします。
111 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 08:05:38 ] つ FormulaArray つーかVBAヘルプを 配列数式 で検索してみたらトップに出てくるじゃん
112 名前:110 [2007/06/11(月) 14:09:22 ] >>111 レスありがとうございます
113 名前:107 [2007/06/11(月) 14:48:11 ] 現象の追加情報です。 デザインモードにして、コントロールにカーソルを合わせると、 ラベルやテキストボックスは、 カーソルが矢印付きの十字(コントロールを移動できる表示)に 変わるのですが、ボタンについては指の形のままです。 このデザインモード(ラベルにカーソルを合わせると矢印付きの十字に 変わる状態)のまま、カーソルをボタンの上に持って来てクリックすると ボタンに関係付けられたマクロが実行されます。 これって正常な動作なんでしょうか?
114 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 20:40:20 ] どうでもいい
115 名前:デフォルトの名無しさん [2007/06/12(火) 01:28:42 ] 質問です。 Excel2000で以下のようにあるブックから新しいブックを作り セルをCopyメソッドを使用してコピーしようとすると 「RangeクラスのCopyメソッドが失敗しました」と エラーになってしまうのですが CopyとPasteメソッドをつかってそれぞれのブックを Activateにしてコピーしないと無理でしょうか? Dim xlsApp As Excel.Application Set newBook = Excel.Application With newBook Set newBk = .Workbooks.Add 〜編集処理〜 Workbooks(ブック1名称).Activate Workbooks(ブック1名称).Application.Worksheets(シート名).Range("A1:A20").Copy _ .Workbooks(ブック2名称).Application.Worksheets(シート名).Range("A1") End With
116 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 02:40:26 ] >>115 Set newBk = Workbooks.Add Workbooks(ブック1名称).Worksheets(シート名).Range("A1:A20").Copy _ newBk.Worksheets(シート名).Range("A1") こういうことか?
117 名前:デフォルトの名無しさん [2007/06/12(火) 17:02:19 ] Excel2007です 新規ブックでシート上にシェイプを作成し、そのシェイプにマクロを登録します。 シェイプに登録したマクロはこれです。 sub a thisworkbook.close end sub このシェイプをクリックするとエクセルが終了してしまいます。 「問題が発生したため・・・・」 この問題を回避する方法はありますか?
118 名前:項目によるセルの参照ないし選択? mailto:sage [2007/06/12(火) 19:21:52 ] Excel2000のユーザーでVBAの入門者です。 [表] 列に最高気温、最低気温、平均気温という三つの項目を入れ 行に日付の項目を入れた表を つくりました。下記はその具体例です。 A2 = "2007年1月1日", A3 ="2007年1月2日", A4 = "2007年1月3日",....(以後果てしなく続く) B1 = "最高気温", C1 = "最低気温", D1 = "平均気温" [VBAでやりたいこと] 例えば、2007年1月1日の最高気温の値をVBAで入力する場合に、A列の行から"2007年1月1日" という値の入っているセル番号を探し、"最高気温"の項目と交わるセルをセレクトしたい。 セル番号で直接参照して選択させる方法だと汎用性がないので、項目によって参照させたいんです。
119 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 19:54:23 ] >>117 そのマクロを実行しない
120 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:05:58 ] >>118 A2を選択して データ->フィルタ->オートフィルタ
121 名前:項目によるセルの参照ないし選択? mailto:sage [2007/06/12(火) 22:32:41 ] >>120 助言して下さって、どうも有難う御座います。私の説明が間違っていたんでしょうか、 オートフィルタは私のやりたいこととはかなり違う気がします。 アクティブではなく「セレクト」という表現を使ったのがまずかったかもしれません。 正確な用語法が分からなくてすみません。
122 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 22:59:16 ] >>121 セル番号で直接参照して選択させる方法って何? 項目で参照させたいならセルに名前をつければ?
123 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 00:43:57 ] >>118 Find メソッドを使う ワークシート関数のINDEX 、VLOOKUPを使う
124 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:07:26 ] どなたかご存じでしたら教えてください。 VBAからJAVAのクラスを使用するための手順を ご存じでしたら教えてください。 (JAVAのアプリを実行する手順ではないっす) JNIを使ってJAVAを呼び出すのでしょうか? 当方、VBAもJAVAも初心者なもんで、一連の流れを書いてくれると ありがたいです。 スレチだったらスンマセン
125 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:22:55 ] >>124 スレ違いなのでさようなら 参考までに>>101 の後半読んでおいてね
126 名前:ここでナット [2007/06/13(水) 09:49:13 ] ちょっとアホな質問かもしれないですが、 VBAのフォームのソースだけを変更して、 それ以外の標準モジュールやシートの内容は そのままにする事をプログラム化する方法は ありますでしょうか? ※ボタンを押すだけでソースだけ更新みたいな事です。
127 名前:デフォルトの名無しさん [2007/06/13(水) 09:59:13 ] VBAでグラフを描きたいのですが、第2軸の目盛の最大、最小の指定は どうすれば良いのでしょうか。 (下記は主軸の場合ですが、どのように変えれば良いのでしょうか) With .Axes(xlValue) .MinimumScale = 0 .MaximumScale = 1 End With よろしくおねがいします。
128 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 10:17:52 ] >>127 操作をマクロに記録して睨めっこ。
129 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 10:37:42 ] どこで聞いて良いかわからなかったんだが、 膨大な量の乗車案内を検索かけたいんだが、何か良い方法はないだろうか? 東京→上野 東京→新宿 東京→池袋 東京→・・・ ・ ・ ・
130 名前:117 [2007/06/13(水) 10:40:04 ] >>119 ありがとうございます。 現在はその回避方法を採用するつもりです。 ただ、その現象が当方の環境によるものかが判断できません。 みなさんの所でも同じ現象が起こりますでしょうか? また、他の回避方法もありましたらお教えください。
131 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:44:24 ] >>126 具体的には?
132 名前:ここでナット [2007/06/13(水) 11:59:54 ] >>131 ソースに不具合があったので、ソースだけ更新を行いたいです。 エディター画面を開いてソースを書き換える作業すれば良い事なのですが その作業を行える人がいないので、簡単にソースだけを書き換える方法を探してます。 例えば、別のExcelマクロを用意してその中に新しいソースを入れて、 ボタンを押して実行すると、変更先のExcelマクロのソースだけが更新するみたいな 事がやれたらいいなと思っています。
133 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:15:41 ] >>130 当該ブックのみ終了。再現しません
134 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:26:31 ] >>132  . . . 具体的には? ttp://dictionary.goo.ne.jp/search.php?kind=jn&MT=%B6%F1%C2%CE%C5%AA
135 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 19:08:08 ] >>132 エクスポートインポート
136 名前:デフォルトの名無しさん [2007/06/14(木) 01:29:13 ] 教えてください。 ボタンを押すと、C→File→にあるdata.csvを開いて処理開始なんですが、 データが無い場合にエラーメッセージを表示するよう仕組んでと言われまして。 ChDir "C:\File\data.Csv" Workbooks.Open Filename:= _ "C:\File\data.Csv" とこのあと、if then 文を書けばいいと思うのですが、 If Dir("C:\File\data.Csv") = "" Then MsgBox "DataBook.xlsは見つかりません" End If Exit Sub こんなん書いたんですが、勿論動きません。 IF文以下お教え願います。
137 名前:デフォルトの名無しさん [2007/06/14(木) 01:31:43 ] すみません、表記間違ってました。 MsgBox "DataBook.xlsは見つかりません" ↓ MsgBox "data.csvは見つかりません" の間違いです
138 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:35:16 ] あとじゃなくて先にしろ
139 名前:デフォルトの名無しさん [2007/06/14(木) 06:08:04 ] If Dir("C:\File\data.Csv") = "" Then MsgBox "data.csvは見つかりません" Exit Sub End If ファイルオープン処理 動かなければどこのコードで動かないのか確認してから考えた方が…。
140 名前:127 [2007/06/14(木) 10:54:26 ] >128 レスありがとうございます。それしかないですか^^;
141 名前:デフォルトの名無しさん [2007/06/14(木) 11:08:33 ] EXCEL2007のVBAで、複合グラフ(折れ線)を描いたのですが、 グラフの描画領域が、指定したセル範囲をオーバーして描かれます。 指定したセル範囲に収まるようにするには、どうすれば良いのでしょうか 列(縦)方向はぴったり合うのですが、 行(横)方向に幅がオーバーします(左端も少しセルの左端からズレます)。 <コード> Dim dataRg As Range, graphRg As Range Sheets("DATA1").Select Set dataRg = Sheets("DATA1").Range(Cells(data_row_from, data_col_from), Cells(data_row_to, data_col_to)) Set graphRg = ActiveSheet.Range(Cells(graph_row_from, graph_col_from), Cells(graph_row_to, graph_col_to)) Sheets("CHART").Select With ActiveSheet.ChartObjects.Add(graphRg.Left, graphRg.Top, graphRg.Width, graphRg.Height).Chart .SetSourceData Source:=dataRg, PlotBy:=xlColumns .ChartType = xlLine .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False .HasLegend = False .SeriesCollection(1).Border.ColorIndex = 41 .SeriesCollection(2).Border.ColorIndex = 53 .SeriesCollection(2).AxisGroup = xlSecondary End With
142 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 13:39:11 ] >>140 With ActiveChart.Axes(xlValue, xlSecondary) .MinimumScale = 0 .MaximumScale = 1 End With
143 名前:117 [2007/06/14(木) 13:52:30 ] >>133 そちらの環境では再現しませんでしたか。 情報ありがとうございます。 もう一台、2007をインストールしたPCを用意したのですが、 そちらでも100%再現しました。 マクロを直接実行した場合は問題なく当該ブックのみ終了するのですが、 そのマクロをシェイプに登録し、そのシェイプをクリックすると ブックが閉じたあとにExcelが異常終了してしまいます。 ブックを変更していた場合、保存を確認するダイアログがでますが、 「キャンセル」を選択した場合は問題なく、「はい」「いいえ」を 選択した場合は異常終了となります。 ただ、他のブックを開いている場合は当該ブックのみ終了し、 Excelの異常終了はありません。 前回質問時はUpdateしてませんでしたが、Updateした環境でも 同様でした。 とりあえず、他の掲示板などでも同じ質問をしてみてから マイクロソフトに問い合わせをしてみようと思います。 ありがとうございました。
144 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 15:20:06 ] >>132 VBE.CodeModuleのInsertLines(), DeleteLines(), ReplaceLine()あたり。 VBEを使うには、なにか制限なり手順なりがあったような気もする。 実行も、セキュリティレベルを下げる必要があるかも。 まぁ、そのような状況にならないように、アプリはアドインで作った方がいい。
145 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 15:33:12 ] >>143 他の環境でも再現するんだ 何か共通でインストールしてるものに影響されてるのかな?
146 名前:144 mailto:sage [2007/06/14(木) 15:37:08 ] ttp://sourceforge.jp/projects/vbaunit/から、vbaunitというのをダウンロードして、 新規Bookを開き、参照設定でVBAHelper.xlaと「Microsoft Visual Basic for Applications Extensibility 5.3」を参照する。 新規にモジュールを作成し(Module1)、次のコードを貼り付け実行すると、3行目が修正される。 Option Explicit Sub foo() Dim cm As CodeModule Set cm = VBAHelperModule.VBAHelperLookupCodeModule("Module1") cm.ReplaceLine 3, "Sub bar()" End Sub
147 名前:117 [2007/06/14(木) 18:15:07 ] >>145 こちらのテスト環境ですが、どちらも XP Pro SP2 で Office 2007 Enterprise です。 ただ、一方は Virtual PC 上の XP に Excel2007 のみをインストールした状態です。 今のところ考えられる条件は ・シェイプにマクロを割り付けてクリックで実行 ・現在のブックのウインドウが閉じられる ・他のブックのウインドウが開いていない thisworkbook.close 以外にも、これらのコードでもだめでした。 workbooks(1).close window(1).visible = false
148 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 19:01:36 ] >>147 なるほど、おそらく2007固有の現象ということですな 2007持ってないんで他の持ってる人に試してもらいたいね
149 名前:140 [2007/06/15(金) 09:13:16 ] >>142 レスありがとうございます
150 名前:デフォルトの名無しさん [2007/06/15(金) 16:13:53 ] Rangeの最初の位置を(左上)得たいのですが、どうするのが簡単なんでしょ。 ActiveSheet.Range("テーブル[列]").Offset(0, 0) Offsetでよいのかな?うまくいっているみたいですけど
151 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:19:45 ] ActiveSheet.Range("テーブル[列]")(1) など
152 名前:150 [2007/06/15(金) 16:26:32 ] Excel2007です。 >>151 サンクスです。 でじつは、Rangeオブジェクトを for で回そうと、 Dim StartCell As Range, LastCell As Range Set StartCell = ActiveSheet.Range("テーブル[列]").Offset(0, 0) Set LastCell = ActiveSheet.Range("テーブル[列]").End(xlDown) ' 資産に関連するもの更新 For i = StartCell.Row To LastCell.Row CalculateTable (ActiveSheet.Cells(i, 4)) Next i としていたのですが、もっと簡単な書き方はないでしょうか? Dim Cell As Range For Each Cell In ActiveSheet.Range("テーブル[列]") CalculateTable (Cell) Next とすると、 CalculateTable (Cell) で、オブジェクトが必要です、と怒られてしまいます。 orz
153 名前:150 [2007/06/15(金) 16:30:12 ] >>152 うああああ、 CalculateTable (Cell) じゃなくて、 CalculateTable Cell にしたら、エラーでなくなった orz マジVBAわかんねえええええ。 なんだこら
154 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:37:34 ] 関数単体で引数()でくくるとなりますね
155 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 21:01:14 ] たぶん配列とまぎらわしいからだろ
156 名前:初心者 [2007/06/17(日) 13:50:18 ] はじめまして、VBAをやり始めたばっかりで全然わからないので教えて下さい。 (1)1+2+3+…+10を計算する (2)1+3+5+…+19を計算する (3)1+4+9+…+100を計算する と言う問題で以下の空欄にあてはめるものを答える問題です。 Sub ex() Dim x As Integer, sum As Integer sum = 0 For x = 1 To 10 (空欄) Next x Msgbox "合計=" & sum End Sub 長々とすみません。よろしくお願いします。
157 名前:デフォルトの名無しさん [2007/06/17(日) 13:58:01 ] >>156 宿題だとばれると教えてもらえないから、もう少し、利き方変えた方がいいぞ あと「よろしくお願いします」って、お前他力本願スギ。 どこが、わからなくて、どこで詰まっているかを質問しよう。
158 名前:デフォルトの名無しさん [2007/06/17(日) 14:01:01 ] (1) sum = sum + x (2) sum = sum + (2*x -1) (3) は自分で考えろ馬鹿
159 名前:初心者 [2007/06/17(日) 15:52:53 ] すいません。(3)がわかりません
160 名前:デフォルトの名無しさん [2007/06/17(日) 16:36:26 ] sum = sum + (5*x -1)
161 名前:初心者 [2007/06/17(日) 17:02:14 ] なぜそうなるのでしょうか?
162 名前:デフォルトの名無しさん [2007/06/17(日) 17:12:23 ] >>160 ワロタ
163 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 17:48:13 ] >>161 悪いことは言わん。 算数からやり直せ。
164 名前:デフォルトの名無しさん [2007/06/17(日) 18:14:15 ] なんでまたVBAのスレに質問してくるの? VBAどころか、ただのアルゴリズム…いや、算数か。の問題だろ。 法則を考えろよ…。
165 名前:デフォルトの名無しさん [2007/06/17(日) 18:27:48 ] 言っておくけど160のは違うぞ。 ヒント。 sum=1+4+9+16+25+36+49+64+81+100 これで分からなければ終わってる。
166 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:41:58 ] 気がつかなかった俺オワタw
167 名前:デフォルトの名無しさん [2007/06/17(日) 18:46:23 ] わからない。答え教えてもらえないですか?
168 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:56:47 ] (3)は sum=sum+(x*x)
169 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:57:32 ] >>156 (2) For i = 1 To 19 Step 2: sum = sum + i: Next: Exit For (3) Select Case x Case 1: sum = sum + 1 Case 2: sum = sum + 4 Case 3: sum = sum + 9 Case 4: sum = sum + 16 Case 5: sum = sum + 25 Case 6: sum = sum + 36 Case 7: sum = sum + 49 Case 8: sum = sum + 64 Case 9: sum = sum + 81 Case 10: sum = sum + 100 End Select これでいーだろ まじめに(3)のヒントだすなら「^2」
170 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:06:07 ] コーディングより1+4+9+…+100が全くわからなかった。 オワテルwww
171 名前:デフォルトの名無しさん [2007/06/17(日) 19:30:52 ] をいをい…。 つうか>>156 、その問題は学校の問題か?職場の問題か?
172 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:30:10 ] >>169 ヒント:「For x = 1 To 10」部分は固定
173 名前:169 mailto:sage [2007/06/17(日) 21:01:49 ] >>172 ん? (2)のことならxでループさせてないんだけど? 試してないからわからんけど、ネストされたForで答えでない? 意味取り違えてたら堪忍
174 名前:初心者 [2007/06/17(日) 21:49:26 ] 2乗はどうあらわしたらいいのですか?
175 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:55:05 ] >>174 >>169