doara_2011 の回答履歴

全57件中1~20件表示
  • VBA FindメソッドとMatch関数のところ

    まだVBAに慣れていませんが、下記のソースを書いてみました。 ★印の間の部分の処理を、最初はFor Nextで書いていたのですが、理由が解らないですが…うまく処理されない為、タイトルの2種類(セルのFindメソッドとMatch関数)を使って処理しようと思い書き直したのですがうまく処理されません。 どこがいけないのか解らず数時間も悩んでしまいました。 すみませんが、どなたか教えてください。よろしくお願いします。 Sub 外注別案内書作成() Dim ws As Worksheet 'オブジェクト格納 Dim i As Long, j As Long '繰り返す回数格納 Dim annaicode As Variant '案内場所C格納 Dim addwsname As Variant 'シート名前格納(※案内場所名) Dim flag As Boolean '真偽 Dim r As Range 'Findメソッドの返り値格納 Dim K As Long 'Match関数の返り値格納 'レポート元でQ列の情報が入っている時に、案内場所別で情報を作成する。 'レポート元でQ列に値がある時に、annaicode変数へ格納。 For i = 2 To Worksheets("レポート元").Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, "Q").Value <> "" Then annaicode = Cells(i, "Q").Value End If ★ココから-------- '外注一覧でannai変数と一致した時に、addwsname変数へ格納。 FindメソッドとMatch関数 With Worksheets("外注一覧").Columns("1:1") Set r = .Find(What:=annaicode, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns) If r Is Nothing Then MsgBox i & "行目の案内場所Cの入力が不正です。" & vbCrLf & "処理を中断しますね", _ vbOKOnly + vbExclamation, "お知らせ" Else With Worksheets("外注一覧") K = .Match(annaicode, .Range(.Cells(1, "A").Value, .Cells(.Rows.Count, "A").Value), 0) addwsname = .Cells(K, "B").Value + "_案内" End With End If End With ★ココまで-------- 'ワークシートコレクション内でaddwsname変数と一致した時に、flag変数をTrueにする。 For Each ws In Worksheets If ws.Name = addwsname Then flag = True End If Next ws 'flag変数の値により、各々処理をする。 If flag = True Then Worksheets("レポート元").Cells(i, "A").EntireRow.Copy _ Destination:=Worksheets(addwsname).Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) flag = False Else Worksheets.Add ActiveSheet.Name = addwsname Worksheets("レポート元").Cells(i, "A").EntireRow.Copy _ Destination:=Worksheets(addwsname).Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) End If Next i End Sub

  • Excel VBAにてシート移動について

    初心者なのでわかりやすくお願いいたします、 Excel でワークシートを次のシート移動したときににマクロの記述にてsheet(1)からsheet(2)に移るときにはこのように数字を書けばよろしいのですが、ある任意のシートから次シートに移動したいときには任意のシート、次のシートはどのように記述すればいいかわかりません、どなたかお教えください  ルークといいます宜しくお願いいたします。

  • VBA: Select Caseを短くしたい

    Excel2003 の VBA でクラスモジュールを作成しています。 Select Case文で Caseが多い場合にコードを短くするテクニックがありませんか。 Select Case i   Case 1     str = "momo"   Case 2     str = "sakura"       ・       ・       ・   Case 100     str = "tsubaki" End Select のようなコードです。 配列に入れることも考えましたが、 str(1) = "momo" str(2) = "sakura"      ・      ・      ・ str(100) = "tsubaki" となって、コードを短くする効果は僅かです。 クラスモジュールなので、ワークシートにデータを入れておくテクニックは使えません。 また、外部ファイル(*.txt など)も管理の面から使いたくありません。 クラスモジュール内だけで完結させるテクニックがないでしょうか。

  • VBA FindメソッドとMatch関数のところ

    まだVBAに慣れていませんが、下記のソースを書いてみました。 ★印の間の部分の処理を、最初はFor Nextで書いていたのですが、理由が解らないですが…うまく処理されない為、タイトルの2種類(セルのFindメソッドとMatch関数)を使って処理しようと思い書き直したのですがうまく処理されません。 どこがいけないのか解らず数時間も悩んでしまいました。 すみませんが、どなたか教えてください。よろしくお願いします。 Sub 外注別案内書作成() Dim ws As Worksheet 'オブジェクト格納 Dim i As Long, j As Long '繰り返す回数格納 Dim annaicode As Variant '案内場所C格納 Dim addwsname As Variant 'シート名前格納(※案内場所名) Dim flag As Boolean '真偽 Dim r As Range 'Findメソッドの返り値格納 Dim K As Long 'Match関数の返り値格納 'レポート元でQ列の情報が入っている時に、案内場所別で情報を作成する。 'レポート元でQ列に値がある時に、annaicode変数へ格納。 For i = 2 To Worksheets("レポート元").Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, "Q").Value <> "" Then annaicode = Cells(i, "Q").Value End If ★ココから-------- '外注一覧でannai変数と一致した時に、addwsname変数へ格納。 FindメソッドとMatch関数 With Worksheets("外注一覧").Columns("1:1") Set r = .Find(What:=annaicode, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns) If r Is Nothing Then MsgBox i & "行目の案内場所Cの入力が不正です。" & vbCrLf & "処理を中断しますね", _ vbOKOnly + vbExclamation, "お知らせ" Else With Worksheets("外注一覧") K = .Match(annaicode, .Range(.Cells(1, "A").Value, .Cells(.Rows.Count, "A").Value), 0) addwsname = .Cells(K, "B").Value + "_案内" End With End If End With ★ココまで-------- 'ワークシートコレクション内でaddwsname変数と一致した時に、flag変数をTrueにする。 For Each ws In Worksheets If ws.Name = addwsname Then flag = True End If Next ws 'flag変数の値により、各々処理をする。 If flag = True Then Worksheets("レポート元").Cells(i, "A").EntireRow.Copy _ Destination:=Worksheets(addwsname).Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) flag = False Else Worksheets.Add ActiveSheet.Name = addwsname Worksheets("レポート元").Cells(i, "A").EntireRow.Copy _ Destination:=Worksheets(addwsname).Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) End If Next i End Sub

  • シート作成について

    Excellマクロで検索とシート作成等を行いたいのですが、全くの素人のためご教授願えればと思います。 (1)"入力"シートのC5から値のある行(C列)まで同じシートがあるか確認する (2)同じ名前のシートが無ければ、"原紙"シートに"入力"シートのG列からX列までを転記しシートをコピーする(既にある場合は作成なし、転記のみ) ※転記する列は、入力シートG=原紙シートC など指定される (3)コピーしたシート名をセルの値(C列)と同じ名前に変更 (4)C5から値のある最終行まで(1)~(3)を繰り返す 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

  • VBAに範囲を指定して印刷

    特定のセルに数字を入力することでVLOOKUPで印刷ページを 検索して指定できるシートを作成しています。 下記のようなVBAを作成しました。 印刷開始ページと印刷終了ページを指定する場合、 セルの指定はどのようにすれば、よいのでしょうか? 開始ページと終了ページが同じセルの為、 開始ページ=Rnage("セル") 終了ページ=Rnage("セル") としてしまいますと、エラーが出てしまいます。 Sub 印刷() Dim S As Long Dim B As Long S = Application.InputBox("印刷開始ページを入力", Type:=1) If 開始ページ = 0 Then Exit Sub B = Application.InputBox("印刷終了ページを入力", Type:=1) If 終了ページ = 0 Then Exit Sub ActiveSheet.PageSetup.Order = xlOverThenDown ActiveWindow.SelectedSheets.PrintOut _ From:=S, To:=B, Collate:=True End Sub 宜しくお願い致します。

  • コマンドプロンプトで処理時間をカウント

    こんばんは。バッチ処理についてお教え下さい。 例えばあるexeを起動するバッチを1行で書くとします。 そのバッチを実行するとコマンドプロンプトが表示され起動しおわったらプロンプトは閉じます。 プロンプトが消えるまで、「.」を1こつづ増やしていきたいと思います。 Forループを使えばいいような気がするのですが、どのように文を書けばよいかわかりません。 やりたいことは、プロンプトが表示されている時、ユーザーは正しく動いているのかわかりません。 そこで「.」を1こづつ増やせばプログラムが動いていることがユーザーにわかると思うので、そのようにしたいです。 ご教授お願いいたします。

  • Excel2007 VBA Copyメッソド

    Excel2003で開発されたVBAをExcel2007で動くように修正しているのですが、 次のコードがExcel2007ではエラーになります。  (1)Workbooks.Open Filename:=pthFolder & "\" & nmFile  (2)nmSheet = Workbooks(nmFile).ActiveSheet.Name  (3)Workbooks(WB_Name).Worksheets(S_MAIN).Copy After:=Workbooks(nmFile).Sheets(nmSheet) (1)と(2)は実行されますが、(3)がエラーになり、(4)に飛びます。 (4) SaveError:      MsgBox "エラー発生"      Application.DisplayAlerts = False      Workbooks(nmFile).Close    End Sub どなたか、Excel2007でエラーになる理由と解決策を教えていただけないでしょうか。 既に同じ質問が出ているかもしれませんが、VBA初心者なもので、うまく探せませんので、 ご協力をお願いいたします。

  • クラスモジュールの使い方が詳しく書かれたVBAの本

    VBAを勉強中のものです。 クラスモジュールを使いこなせるようになりたいのですが それについてよく書かれている本はありますでしょうか? VBAの勉強している際に読む本は、標準モジュールにコードを記載するよう書かれています。 ご存知の方がいらっしゃいましたらご回答お願いします。

  • エクセル2007VBAで新規ファイルを作る場合

    現在A社というファイルのsheet1に電気代と名前を付けたデータ、sheet2に ガス代という名前を付けたデータがあり電気代のブックからコピーして新規ファイルに貼り付けをしたいと思い下記のとおりマクロがありますが、新規ブックを開いた時常に1ではなく他に新規ブックを開いていたら2とか3になってしまいます。すると再度新規ブックに戻ってガス代を貼り付ける時2とか3tpか4とかでしたらエラーになってしまいます。 こういう場合どのように書いたら良いのでしょうか? それから最後に新規ファイルで名前を付けて保存のところまでダイアログ出すところまで 教えていただきたいのですが。 マクロ勉強始めたばかりでよろしくお願います。 Sub DGCopy() Cells.Select Selection.Copy Workbooks.Add Cells.Select ActiveSheet.Paste Sheets("Sheet1").Select Sheets("Sheet1").Name = "電気代" Windows("A社.xls").Activate Sheets("電気代").Select Cells.Select Application.CutCopyMode = False Selection.Copy Windows("Book1").Activate Sheets("Sheet2").Select Cells.Select ActiveSheet.Paste Sheets("Sheet2").Select Sheets("Sheet2").Name = "ガス代" Application.CutCopyMode = False End Sub

  • VBAによるコメントの余白設定

    Excel2010のVBAでコメントの余白の長さを設定したいのですが、やり方が分かりません。 どのようにするのか、プログラムコードを教えてください。 回答よろしくお願いします。

  • MS Wordのマクロで自動改ページする方法

    xabcxdefgxhijk・・・ のように並んだ文字列を xabc(改ページ) xdefg(改ページ) xhijk・・・ のように,xの位置で自動的に改ページしたい。 ------------------------------------------ 上記の動作を実行するためのマクロを見よう見まねで 以下に示すように作成したのですが,成功したり成功しなかったりします。 原因が分かる方ご指摘ご修正いただけるとありがたいです。 (Wordのマクロは今回始めて作成する全くの初心者です。) WordのバージョンはOffice2003です。 よろしくお願いいたします。 ------------------------------------------ Sub kaipage() Dim blnFound As Boolean Dim rngContent As Range Dim intCount As Integer blnFound = True Set rngContent = ActiveDocument.Content intCount = 0 Do While blnFound = True With rngContent.Find .ClearFormatting .Wrap = wdFindContinue .Text = "x" .Replacement.Text = "$" .Execute Replace:=wdReplaceOne, Forward:=True End With Selection.Find.Execute Selection.InsertBreak Type:=wdPageBreak blnFound = rngContent.Find.Found If blnFound = True Then intCount = intCount + 1 Loop MsgBox (intCount & "個見つかりました。") End Sub

  • エクセルの特定シートを完全に手動計算にする方法

    こんにちは。 エクセルのVBAについて最近勉強を始めた初心者です。 下記について知恵をお借りしたく、質問させて頂きます。 4つのシートで構成されているブックがあります。(他ブックとの連動はありません) シート1は集計表で、シート2~4はシート1の元データーが入っています。 本体はシート1のみ手動計算にしたいのですが、現状は以下の方法を取っています。 (1)ブックを開くと、ブック全体を手動計算にする (2)必要なタイミングで、シート1の特定セル範囲(3パターンあり)を再計算させるマクロを実行 (3)ブックを閉じると、自動計算に戻す こちらの方法でほぼ問題無いように思えたのですが、 ブックを閉じる時にエクセルの仕様で『'ファイル名.xls'への変更を保存しますか?』と聞かれますよね。 そこで"キャンセル"を選択すると、ブックは開いたまま自動計算モードに戻る=シート1が再計算されてしまうのです。 (このタイミングで(3)(Workbook_BeforeClose)のコードが走っているのだと思います) 先述の通り、本来手動計算にしたいのはシート1に限定されており、 シート2~4は自動計算で構いません。 やりたい事をまとめると、 ■ブックを開く  :シート1=手動計算、シート2~4=自動計算 ■ブックを閉じる:シート1=自動計算に戻す、ただしキャンセルした場合は手動計算モードを保持 現在のWorkbook_BeforeClose~の部分に何らかのコードを加えたら実現可能? とも思いますが、そこが分からず行き詰っています…。 上記実現するために良い方法がありましたら、ご教示お願いいたします。 【This Wook Book】に記述しているコード----------------------- Private Sub Workbook_Open() 'ブックを開くと手動計算にする Application.Calculation = xlCalculationManual End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) 'ブックを閉じると自動計算に戻す Application.Calculation = xlCalculationAutomatic End Sub -----------------------------------------------------

  • VBS 以下の可変テキストから値を抽出

    複数の端末からアカウント情報とユーザ名をテキストに出力しています。 そのアカウント情報から、ユーザが所属しているグループを抽出する必要があります。 以下のような形の形式でテキストには出力されています。 ・テキストの内容は一行ずつでも全行まとめてでも呼び出せる(alllineは全行格納、lineは一行ずつループで読み取る) ・内容はそれぞれの端末で可変 ・複数所属している場合もある ・テキストからユーザの所属グループのみを出力する たとえば以下のテキストからNakayamaの所属グループであるAdministrators: とUsersを抽出したい場合ですが、 InstrでInstr(allline, nakayama)探しだし、その場所の文字数を特定することはできます。 ですがそこからどうやってAdministratorsのみを取得すればよいのでしょうか。 思いついたのは指定のユーザを検索して、 ユーザをキーにそれより上に:がある行を特定しその行を抽出して、 Replaseで:を消してやればいいと思うのですが、 そのようなことはできるのでしょうか。 他の方法でもありましたらご教示ください。 テキストのアカウント情報サンプル ▲アカウント Administrators: Administrator Nakayama Kimura DomainUser Backup Operators: Guest: Users: Kitagawa Maruyama Nakayama PowerUser:

  • VBAの転記について

    With Sheets("入力") '3行目~22行目まで For i = 5 To 24 SheetName = Sheets("入力").Cells(i, "C").Value On Error Resume Next Set Dummy = Sheets(SheetName) SheetName2 = .Cells(i, "C").Value U最終行 = Sheets(SheetName2).Range("C65536").End(xlUp).Row + 1 If U最終行 = 39 Then Sheets(SheetName2).Copy BEFORE:=ActiveSheet Sheets(SheetName).Delete End If If Err.Number = 0 Then A = Sheets(SheetName2).Range("C65536").End(xlUp).Row + 1 Sheets(SheetName2).Range("C" & A).Value = .Cells(i, "G").Value Sheets(SheetName2).Range("D" & A).Value = .Cells(i, "I").Value Sheets(SheetName2).Range("E" & A).Value = .Cells(i, "L").Value Sheets(SheetName2).Range("F" & A).Value = .Cells(i, "N").Value Sheets(SheetName2).Range("G" & A).Value = .Cells(i, "P").Value Sheets(SheetName2).Range("H" & A).Value = .Cells(i, "R").Value Sheets(SheetName2).Range("I" & A).Value = .Cells(i, "T").Value Sheets(SheetName2).Range("K" & A).Value = .Cells(i, "V").Value Sheets(SheetName2).Range("L" & A).Value = .Cells(i, "X").Value ElseIf .Cells(i, "C").Value <> "" Then G = Sheets("原紙").Range("C65536").End(xlUp).Row + 1 Sheets("原紙").Range("B1").Value = .Cells(i, "D").Value Sheets("原紙").Range("B4").Value = .Cells(2, "D").Value Sheets("原紙").Range("C" & G).Value = .Cells(i, "G").Value Sheets("原紙").Range("D" & G).Value = .Cells(i, "I").Value Sheets("原紙").Range("E" & G).Value = .Cells(i, "L").Value Sheets("原紙").Range("F" & G).Value = .Cells(i, "N").Value Sheets("原紙").Range("G" & G).Value = .Cells(i, "P").Value Sheets("原紙").Range("H" & G).Value = .Cells(i, "R").Value Sheets("原紙").Range("I" & G).Value = .Cells(i, "T").Value Sheets("原紙").Range("K" & G).Value = .Cells(i, "V").Value Sheets("原紙").Range("L" & G).Value = .Cells(i, "X").Value '原紙をコピーする Sheets("原紙").Copy BEFORE:=Sheets(1) 'シートの名前を市場コードにする Sheets(1).Name = SheetName End If Next i End With On Error GoTo 0 上記のVBAを作成しましたが、 C行の値ごとの転記(G~Xの値)が出来ません。 どこが間違いか教えていただけないでしょうか。

  • 巨大なCSVファイルを編集したい

    以下のような、カンマで区切られたCSVファイルがあるとします。 個人ID,測定日,速度,曜日,エラーチェック a001,20110212,0,1,0 a001,20110212,5,1,0 a001,20110212,10,1,0 a002,20110212,2,1,1 a002,20110212,8,1,0 a003,20110212,10,1,1 a003,20110212,15,1,0 これが実際には下に4000万行ほど続き、ファイルサイズは2GBを超えます。 そのため、使用しているExcel(2010)では完全に開くことができません。 そして、やりたい作業は以下の2つです。 1、列を絞りたい たとえば、個人IDと速度、エラーチェックだけ残してあとは消す、など。 2、行でファイルを分割したい たとえば、a001さんのデータだけを抽出したCSVファイルを別で保存するなど。 最低限、巨大なCSVファイルを扱うことができるエディタがあればよいのですが、上に挙げた作業が簡単にこなせる機能があれば嬉しいです。 また、プログラムはFortran90を扱うことができますので、Fortranによる方法があればそちらでもかまいません。(その場合は、完全でなくてもよいのでソースを書いてくださると助かります。)

  • Excelマクロでファイルで重複する文字の削除方法

    Excel VBAについて確認させてください。 下記のExcelマクロはエクセルのA列に入力されてある文字を順に読み込んで ユーザが入力したテキストファイル(=FN1)を読み込んで エクセルのA列に入力されてある文字が見つかった場合は削除する動作の繰り返し作業を行い、 エクセルのA列の文字が入力されてある最後の行まで行ったら 出力ファイル(=FN2)として保存するプログラムです。 ここで出力ファイルにはエクセルのA列に入力されていない文字が 残るものと思われますが、ここで入力されていない文字で 重複する文字があった場合はまとめて一つにする方法をを ご教授いただけますでしょうか。 以上お手数おかけしますがよろしくお願いします。 以下、プログラム本文です。 ----------------------------------------------- Sub sample() Dim a As String Dim y As Long Dim x As String Dim FN1 As String Dim FN2 As String x = InputBox("チェックするファイル名を入力してください。(拡張子も含めてください。)") FN1 = ThisWorkbook.Path & "\" & x FN2 = ThisWorkbook.Path & "\チェック済" & x With CreateObject("Scripting.FileSystemObject").GetFile(FN1).OpenAsTextStream a = .ReadAll For y = 1 To Cells(Rows.Count, 1).End(xlUp).Row a = Replace(a, Cells(y, 1), "") '読み込んだテキストファイルにエクセルのA列にある文字が見つかった場合削除 a = Replace(a, vbCrLf, "") '改行コードの削除 a = Replace(a, vbTab, "") 'タブコードの削除 Next .Close End With With CreateObject("Scripting.FileSystemObject").OpenTextfile(FN2, 2, True) .Write a .Close End With End Sub

  • PowerPointVBA複数ファイル一括について

    現在開いているpptと同フォルダ内の全てのpptファイルに対して、 1ページ目のサブタイトルに日付を一括で入れるマクロを作成したいのです。 下記のように作成してみたのですが、いちおう全ファイルに希望通りの個所に希望の文字列が入るのですが、実行にものすごく時間がかかりました。。 ステップインで確認すると、"Presentations.Open FileName:="の行で、Forループの繰り返し毎に、全ファイル開いてしまっているようで。。 一般の初心者で、見よう見まねでやっていまして、ヘルプやWeb検索でも、どうしても解決策を見いだせませんでした。 どなたか、ご教示いただけませんでしょうか。 よろしくお願いいたします。_(_ _)_ ------------------------------------------------------------ Sub AddDatetoAllPPT() Dim todaydate As String todaydate = Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日" Dim myShape As Shape Dim FSO As Object, Files As Variant Set FSO = CreateObject("Scripting.FileSystemObject") Set Files = FSO.GetFolder(ActivePresentation.Path).Files For Each File In FSO.GetFolder(ActivePresentation.Path).Files Presentations.Open FileName:=ActivePresentation.Path & "\" & File.Name Set myShape = ActivePresentation.Slides(1).Shapes("サブタイトル 2") myShape.TextFrame.TextRange.Text = todaydate ActivePresentation.Saved = True Next End Sub

  • killステートメントで

    お世話になります。 excelVBAで、フォルダ内にある殆どが共通性のない名前の ファイル数個を一度に削除するには、どう書けば良いのでしょうか? 但し、削除してはいけないファイルもあります。 これらはマクロ実行する度に作成される仮ファイルで、 確認のためにその都度削除せずに残してあります。 残った削除可能ファイル 11112.xls 22222.xls 33333.xls 44444.xls 55553.xls 削除不可ファイル 88888.xls dim scrp1 as string, scrp2 as string scrp1 = "C:\*2.xls" scrp2 = "C:\*3.xls" kill scrp1, scrp1, 88888.xls ↑わざわざ変数を使う必要もありませんが このような一気消しはできないのでしょうか? お手数おかけしますが、よろしくご教示下さい

  • VBAでオプションボタンを透過

    ワークシート上にOLEオブジェクトのオプションボタンを設置するため、以下のようなマクロを書きました。 意図したように作動するのですが、一箇所だけ不具合があります。 .Object.BackStyle = fmBackStyleTransparent と、透過に設定してるのですが透過してくれません。(エラーにもなりません。) どこがおかしいのでしょうか? Sub test02() Dim n As Long, i As Long Dim myRng As Range With ActiveSheet For n = 3 To 5 For i = 3 To 10 Set myRng = .Cells(i, n) Set opt = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=myRng.Left + 2, Top:=myRng.Top + 2, Width:=myRng.Width * 0.8, Height:=myRng.Height * 0.9) opt.LinkedCell = myRng.Offset(, 4).Address opt.Object.Value = False opt.Object.GroupName = "OptG" & i opt.Object.Caption = Choose(n - 2, "Yes", "No", "N/A") opt.Object.BackStyle = fmBackStyleTransparent Next i Next n End With End Sub