1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ] ・まじめにExcelの機能を追及してみようと思う奇特なひと ・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと ・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと ・とにかく漏れにこんな仕事まわすなと怒っているひと そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです 前スレ pc11.2ch.net/test/read.cgi/tech/1168308855/
9 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 01:27:22 ] ▼━過去スレを見たい人━━━━━━━━━━━━━━━━ o2onで気長にまってたら落ちてくるかも。 o2on・・・2chのdatファイルを共有するP2Pソフトです。 現段階ではまだαバージョンですので、マターリいきましょう。 公式サイト ttp://o2on.net/wiki/
10 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 02:09:10 ] 複数の文字列変数tmp(g))がcells(l,4)に存在するか調べています。 out(syutu)が複数個あるにもかかわらずAでは1つしかみつかりません。 Aのやり方で動作させたいのですがうまく動作しないので @でがまんしています。Aのなにがいけないでしょうか。。。 @ Do Until tmp(g) = "" For l = 1 To 2000 If tmp(g) = Cells(l, 4) Then out(syutu) = Cells(l, 1) & "," & Cells(l, 2) & "," & Cells(l, 3) & "," & Cells(l, 4) syutu = syutu + 1 End If Next l g = g + 1 Loop A Do Until tmp(g) = "" l = 1 Do Until Cells(l, 4) = "" If tmp(g) = Cells(l, 4) Then out(syutu) = Cells(l, 1) & "," & Cells(l, 2) & "," & Cells(l, 3) & "," & Cells(l, 4) syutu = syutu + 1 End If l = l + 1 Loop g = g + 1 Loop
11 名前:10 mailto:sage [2007/05/28(月) 02:26:56 ] すんません 原因わかりました 途中でNULLのセルがありました。 しつれいしました。
12 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 02:40:55 ] セルにURLが書かれていて、HTMLの<title>から</title>までの間の文字列を取得して、 そのURLの1つ横のセルに入力するマクロを教えてください。
13 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 02:54:30 ] >>12 マルチウザイ
14 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 02:56:18 ] マルチじゃありませんよ。あれだけ探したのに
15 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 03:08:00 ] 全く同じ質問を別のスレでもしてる>14
16 名前:デフォルトの名無しさん [2007/05/28(月) 04:20:53 ] ★VBAについて VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheets というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
17 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 09:19:17 ] 質問です。ユーザーフォームのテキストボックスに 整数のみ(小数点も除く)入力させる制限方法って 何かいい方法ありますかねぇ? IMEDisableだと英語も入力できてしまうし・・・ 鬱になりそう・・・
18 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 09:32:35 ] 入力制限なんていくらでもアルゴリズム解説やサンプルソースが転がってるだろ
19 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 10:04:35 ] >>18 (´・ω・`)ググってサンプルソースとかないからココに来たのに・・・
20 名前:デフォルトの名無しさん [2007/05/28(月) 10:26:15 ] excelで、 500件以上のデータの中から同じ文字列のやつを探し出して、 抽出ではなく、1つを残して他は行ごと消去する。 というのはできますでしょうか? 説明わかりにくいので一応簡単な例も… A B C D 1 お肉 10k 1000円 2 野菜 10k 500円 3 菓子 5k 680円 4 お肉 7k 700円 5 お肉 3k 300円 6 菓子 4k 450円 7 アイス 1ケース 800円 の結果が A B C D 1 お肉 10k 1000円 2 野菜 10k 500円 3 菓子 5k 680円 4 アイス 1ケース 800円 というようになる感じです。 B列の文字から判断して値段、数量は関係なしで大丈夫です。 だれか、ご教授お願いします。 そんな僕は経理担当者。。。
21 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 11:32:43 ] B列をUniqで抽出してその行を選択、どっかに避難してから残りを削除ってところかな。
22 名前:デフォルトの名無しさん [2007/05/28(月) 11:45:01 ] >>21 ありがとうございます。 さっそくやってみます。
23 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 11:59:15 ] >>19 言葉は正しく使おうね × 無い ○ 検索仕方が悪いから見つけられてない
24 名前:デフォルトの名無しさん [2007/05/28(月) 12:23:50 ] >>17 VBAは初心者? ググればすぐに見つかりますよ? 一応書いとくけど。 TextBoxのKeyPressイベントに次のコードを書けばOK。 If KeyAscii>=Asc("0") And KeyAscii<=Asc("9") Or KeyAscii=ASC(".") Then Exit Sub else KeyAscii=0 End If
25 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 17:39:21 ] Printers コレクションとPrinter オブジェクトを使って 用紙名から用紙IDを導くことは可能でしょうか? サンプル等があれば宜しくお願いします。
26 名前:デフォルトの名無しさん [2007/05/28(月) 21:01:15 ] 最近は質問だけして去っていくのが多いな〜。 ググる手間が省けてるんだから、解決したら解決したことぐらい報告しろよな〜。 >>25 用紙IDって?
27 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 21:12:48 ] 自分用語かな? 〜がしたいから、〜が知りたいと書けばヒントになるんだがな。
28 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 21:18:00 ] >>17 Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then KeyAscii = 0 End If End Sub
29 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 21:44:56 ] >>28 をいをいw
30 名前:デフォルトの名無しさん [2007/05/28(月) 21:45:49 ] >>28 >>24 が答え言ってるし、小数点も入力させるって言ってるし。
31 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 07:47:15 ] Set addshape = ActiveSheet.Shapes.AddLine(10, 10, 20, 20) と描いたばかりの、オートシェイプがShapesコレクションの何番目か(index)や、 オートシェイプやコントロールの名前が分かっている時に、 それがそれぞれのコレクションの何番目か(index)を知るにはどうしたら良いのでしょうか? よろしくお願いします。
32 名前:25 mailto:sage [2007/05/29(火) 10:03:33 ] >>26 「用紙ID」は判り辛かったですか。すいませんです。 つまり、A4=9 A3=8 という内部の番号です。 これをPrinterオブジェクトで指定して、 出力毎に用紙サイズを選択してレポート出力をしたいのですが、 既定(B5,A4,A3等)の用紙の番号はHELP等で明記されているので可能なのですが、 サーバプロパティで作成したユーザ定義の用紙サイズ番号が設定したPC毎に違うので、 指定ができないのです。 ですからユーザ定義の「サイズ名」を各PC同じにする事によって、 「サイズ名」から内部の番号を割り出して一覧化して 初期処理として用紙選択の一覧に加えるロジックを形成したい考えております。 検索しましたが、同じ考えを抱えている人は多いみたいですが、 約1名を除いて挫折してるみたいです。 その一名のサンプルデータは消滅していました。 www.accessclub.jp/bbs5/0020/vba5978.html 内のwww.accessclub.jp/fileup/ss1_board/300_1.lzh どうぞ宜しくです。
33 名前:デフォルトの名無しさん [2007/05/29(火) 14:06:50 ] EXCELのVBAをつかって一つのグラフエリアに2つのグラフを描きたいのですが教えてください。
34 名前:デフォルトの名無しさん [2007/05/29(火) 15:33:59 ] >>33 系列1と系列2を書きたいということ?
35 名前:デフォルトの名無しさん [2007/05/29(火) 15:43:41 ] >>31 配列のindexとは意味合いが違うが仕様に気をつければzorderposisionが使える
36 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 17:08:30 ] >>32 ↓これを同期させればどう HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Print\Forms それかWidthとHeightをVB側で指定してPagerSize=256でできないか
37 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 22:28:42 ] >>32 サーバプロパティとか相変わらず俺様用語だし、 そもそもPrintersコレクションって… 根 本 的 に ス レ 違 い
38 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 22:39:34 ] cells(1,1)=あいうえお cells(2,1)=かきくけこ cells(3,1)=さしすせそ とあるとき 文字列"きく"とか"すせそ"など上の3つのセルに含まれるかを 簡単に調べる方法、関数ってありますか? 考えたのは"きく"の場合 cells(1,1)ではまず"きく"は2文字なのであい、いう、うえ・・・と順に調べていく とゆう方法。不細工すぎて泣きそうなのでいい方法をお聞きしたく。
39 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 22:57:21 ] 前スレでやったばっかりだけど、InStrじゃダメ? InStr(cells(1,1),"きく") > 0
40 名前:デフォルトの名無しさん [2007/05/29(火) 23:01:57 ] >>38 前スレでさんざん出てきた話だぞ? 具体的にどんな風か教えて。調べてどうしたいとか。 エクセル関数ならFIND、VBAならInstr。 >cells(1,1)ではまず"きく"は2文字なのであい、いう、うえ・・・と順に調べていく 検索対象行が10000行あったらどんだけ時間がかかると思ってるんだ…
41 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 23:16:01 ] >>39 ,40ありがとう いるかくんとかぐぐったけど そうゆう便利なのinstrは出てこなかったから。。
42 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 23:17:12 ] 初歩的なこととは思いますが質問させてください… 自身のファイルがあるディレクトリとファイル(ブック)名を 知る方法がわかりません… 目的は、ブックのセーブと同時に、ブックと同じディレクトリに hetml形式で保存(強制上書き)させたいのです。 何も考えずに ActiveWorkbook.SaveAs _ FILENAME:="./" + ActiveWorkbook.Name + ".htm", _ FileFormat:=xlHtml ってやったら、MyDocumentoに吐き出されてしまいました(´・ω・`)
43 名前:デフォルトの名無しさん [2007/05/29(火) 23:25:22 ] ThisWorkbook.Path
44 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 23:28:51 ] >>42 With ActiveWorkbook ActiveWorkbook.SaveAs _ FILENAME:= .Path & "\" & Mid(.Name, 1, Len(.Name) - 4) & ".htm", _ FileFormat:=xlHtml End With てか、ディレクトリ指定しなきゃThisWorkbookと同じ場所に保存されなかったっけ? よくおぼえてねーや
45 名前:デフォルトの名無しさん [2007/05/29(火) 23:33:11 ] エクセルのA列をまとめてコピーして、別途開けたノートパッドに貼り付け これどうするの? print #1,a のaに列単位とかは指定できないっぽくて困ってます
46 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 23:41:53 ] >>45 print #なんて初めてしった。 使ったことないから知らないけど、 ForEachとかでまわして文字列で渡せば?
47 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 23:53:42 ] 普通にA列選択してコピペすればいいじゃん 何いってるの?
48 名前:デフォルトの名無しさん [2007/05/29(火) 23:55:03 ] <<46 200行くらいの大量なデータなので、ちょっとくどいかなぁと。 セルの切れ目でテキスト上改行するよう制御する必要もあるかもしれないし。 普通にマウス使えば(notepad起動・A列コピー・貼り付けで)直ぐなのですが、 諸般の事情により自動化させたいのです。 printはここで調べました。 ttp://www2.moug.net/bbs/exvba/20070324000008.htm
49 名前:デフォルトの名無しさん [2007/05/30(水) 00:13:05 ] > 200行くらいの大量なデータなので 1個1個タイプするぐらいがちょうどいい
50 名前:46 mailto:sage [2007/05/30(水) 00:34:24 ] >>48 リンク先に答え書いてあんじゃん >'指定範囲だけを出力したいときは .UsedRangeを _ > 指定範囲に代えればいいです。 これでできたよ。 クリップボード使えばいいのか。勉強になった。ウヒョー
51 名前:デフォルトの名無しさん [2007/05/30(水) 00:54:02 ] コンパイルエラーがでる ユーザー定義型は定義さていませんだって。 どうも 'Microsoft Forms 2.0 Object Library への参照設定が必要 _ 参照設定リストに↑が無いばあいは、プロジェクトに _ いったんUserForm を挿入してすぐ解放してください。 _ これで、クリップボードとのやりとりをするDataObject _ が使用可能になります。 という箇所がわかっていないらしい
52 名前:デフォルトの名無しさん [2007/05/30(水) 00:58:07 ] で?
53 名前:46 mailto:sage [2007/05/30(水) 01:05:44 ] >>51 VBEで、挿入→ユーザーフォーム するとプロジェクトにフォームが表示されるから 右クリックで「UserFormの開放」でおk 確認は、ツール→参照設定で Microsoft Forms 2.0 Object Libraryにチェック入ってればおk 参照設定で直接チェックいれてもおk ついでに、 >Open myTextname For Output As io だと上書きされるっぽいから追記したい場合は Output → Append に変更 いいこと教えてもらったからサービスな(はぁと あとは自分で試行錯誤してくれぃ
54 名前:デフォルトの名無しさん [2007/05/30(水) 01:09:55 ] >>46 さんいろいろありがとう。 早速試してみます。
55 名前:デフォルトの名無しさん [2007/05/30(水) 16:22:12 ] Type T code As Integer End Type Sub abc() Dim a As T, c As New Collection c.Add Item:=a End Sub ↑のコードを実行するとc.Addの行で 「コンパイルエラー:パブリックオブジェクトモジュールで定義されたユーザー定義型に限り、 変数を割り当てることができ、実行時バインディングの関数に渡すことができます。」 というエラーになってしまう。 いろいろ調べてみたところCollection側からTの型情報を取得できない?のがエラーの 原因でTを構造体ではなくてクラスにしてObjectとして渡せばOKというのはわかったんですが 構造体が必要なたびにいちいちクラスモジュールを追加するのは正直面倒くさいです Collectionに構造体を素直にAddできる何かうまい方法ってないんでしょうか?
56 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 18:40:42 ] >>35 助かりました。ありがとうございます。
57 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 19:49:34 ] >>55 構造体管理クラス作って構造体毎にセッタゲッタ作ればいいんじゃね?
58 名前:デフォルトの名無しさん [2007/05/30(水) 20:02:05 ] Enum T code = 1 hoge = 2 hage = 3 End Enum Sub abc() Dim a(T.hage), c As New Collection c.Add Item:=a End Sub
59 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 23:42:10 ] エクセルを使って各セルの画素の色の 数値データ(#FFFFFFといったRGB)を 色に変えるマクロなのですが ttp://uploader.fam.cx/img/u3308.txt これだと一応動くのですが256色になってしまいます。 フルカラーで出力させるプログラムは どのようにすればいいのでしょうか? まったくもって初心者なので 完成されたマクロを出してくれるとありがたいです。 どなたかよろしくお願いします。
60 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 00:13:02 ] >>59 仕様
61 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 08:33:51 ] Excelは計算ソフトなので、色数は区分けに使える分だけあれば充分ということで 多くの色数を使えることよりも、使える色数減らして軽快に動くように作られてる つまり、やろうとしてることからして、Excel使うのが間違い
62 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:39:27 ] >>59 htmlでも出力したら?
63 名前:デフォルトの名無しさん [2007/06/01(金) 10:16:09 ] 質問です。下記のようにコードを書いたのですが、エラーが出て 先へ進めません。修正箇所のご指摘とできれば修正後のものをお願いします。 内容はワークシートの中身をプリントするかしないかだけなのですが。 Public Sub PrintWorksheets2() 'declare variables and assign address Dim intPrint As Integer, intCount As Integer, wkbHours As Workbook, shtCurrent As Worksheet Set wkbHours = Application.Workbooks("t9-ex-e9.xls") 'ask user if he or she wants to print the worksheet shtCurrent = wkbHours For intCount = 1 To wkbHours.Worksheets.Count intPrint = MsgBox(prompt:="Print " & shtCurrent.Name & "?", Buttons:=vbYesNo + vbExclamation) If intPrint = vbYes Then 'if user wants to print shtCurrent.PrintPreview End If Next intCount End Sub
64 名前:デフォルトの名無しさん [2007/06/01(金) 10:35:34 ] 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 ** こういった10分ごとのデータが大量にあります。 *の列にあるように、重複データがあったり、 **の列のように間が飛んだりしていいます。 *は重複を削除、**には空白行を挿入して、 完全な10分置きの時系列データにしたいのですが。 数か月分をやれといわれたのですが、一つずつ目で 追ってる状態です。この初心者厨に 書いていただけませんか? スレ違いなら、スレ教えてくださいませ。
65 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 11:43:03 ] 行数分の配列用意して、 1行取得して、foreachで重複行チェック、 同じのがあったら配列のフラグたてる データの行数分繰り返す。 あとは配列チェックしながら 削除するなり転記するなりでいいのでは?
66 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 11:44:54 ] これじゃあ、空白行に対応してないわな。スマソ
67 名前:デフォルトの名無しさん [2007/06/01(金) 12:19:48 ] >>63 どこからつっこもうかと…. まず間違い箇所. >shtCurrent = wkbHours ←型が違う上にオブジェクトにはSetステートメントがいる. >intPrint = MsgBox(prompt:="Print " & shtCurrent.Name & "?", Buttons:=vbYesNo + vbExclamation) shtCurrent.Name て… 一応プログラムはWorkbooks("t9-ex-e9.xls") の全部のシートを対象にしてるみたい なので,修正を書いておくね.
68 名前:デフォルトの名無しさん [2007/06/01(金) 12:22:07 ] Public Sub PrintWorksheets2() 'declare variables and assign address Dim intPrint As Integer, wkbHours As Workbook, shtCurrent As Worksheet Set wkbHours = Application.Workbooks("t9-ex-e9.xls") 'ask user if he or she wants to print the worksheet For Each shtCurrent In wkbHours.Worksheets intPrint = MsgBox(prompt:="Print " & shtCurrent.Name & "?", Buttons:=vbYesNo + vbExclamation) If intPrint = vbYes Then 'if user wants to print shtCurrent.PrintPreview End If Next End Sub ちなみにWorkbooks("t9-ex-e9.xls")がそのマクロが含まれているブックなら ThisWorkBookでOK. もっと短くなる。
69 名前:デフォルトの名無しさん [2007/06/01(金) 12:25:24 ] 2024/7/5または45478の値を 2007/05/24または39226に変換するにはどうしたらいいですか?
70 名前:デフォルトの名無しさん [2007/06/01(金) 12:30:22 ] >>64 列の構成がどうなっているかわからないよ?どこまでが一つの列なのか。 あとは、最初の83265とかの意味も。 もう一つは重複している場合、その列は必ず連続しているか、10行あとに あったりするのかとか。 >>69 ??? 意味が不明。 2007/05/24→39226に変換という意味じゃなさそうだね?
71 名前:69 [2007/06/01(金) 12:39:54 ] >>70 2024/7/5→24/7/5 年/月/日→日/年/月になっていて ほんとは07/05/24なんです
72 名前:64 [2007/06/01(金) 12:48:39 ] >>70 説明がまったくもって馬鹿でした。 *列、**列ではなく、*行、*行でしたすみません。 重複している場合は必ず連続しています。 2007/5/29 20:00 17.206 41.677 * 2007/5/29 20:00 17.206 41.677 * 2007/5/29 20:10 17.162 41.635 2007/5/29 20:20 17.157 41.638 2007/5/29 20:30 17.162 41.642 2007/5/29 20:40 17.147 41.625 2007/5/29 20:50 17.153 41.637 ** 2007/5/29 21:10 17.16 41.645 ** こういった10分ごとのデータが大量にあります。 *の行にあるように、重複データがあったり、 **の行のように間が飛んだりしています。 *は重複を削除、**には空白行を挿入して、 完全な10分置きの時系列データにしたいのですが。 数か月分をやれといわれたのですが、一つずつ目で 追ってる状態です。この初心者厨に 書いていただけませんか? スレ違いなら、スレ教えてくださいませ。
73 名前:デフォルトの名無しさん [2007/06/01(金) 12:51:35 ] >>71 日/年/月の並びは面白いね…。 それを直せるエクセル関数はないかってこと? それともVBA?
74 名前:デフォルトの名無しさん [2007/06/01(金) 12:54:52 ] >>72 64で書いていた最初の83265とかは無視していいの? あと、どこまでが一つのセル?
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 ] 普通にやればいいだけだよ