マクロでセル内の改行を削除する方法

このQ&Aのポイント
  • システムから抽出したCSVファイルをExcelで読み込むと同時に不要な列を削除します。
  • セル内の改行が邪魔で行がずれてしまう問題があります。
  • コードを修正して、セル内の改行を削除する方法を教えてください。
回答を見る
  • ベストアンサー

マクロでセル内の改行を削除する方法

システムから抽出したCSVファイルをExcelで読み込むと同時に不要な列を削除します。 その際、セル内の改行が邪魔で行がずれてしまいます。 すでに記述したコードを生かしながら、セル内の改行を削除する方法はありますでしょうか? 以下がコードです Private Sub CommandButton1_Click() '//Sheet7のセルをクリア Sheets("Sheet7").Cells.Clear '// Sheet7のA1にissue_export.csvを読み込み With Sheets("Sheet7").QueryTables.Add(Connection:="TEXT;C:\*****.csv", Destination:=Sheets("sheet7").Range("A1")) Dim R As Range For Each R In Sheets("Sheet7").Range("A1") R.Value = Trim(Replace(R.Value, vbCr, "")) R.Value = Trim(Replace(R.Value, vbLf, "")) Next R .Name = "test" .FieldNames = True .RowNumbers = False .Refresh BackgroundQuery:=False .RefreshPeriod = 0 .RefreshOnFileOpen = False .PreserveFormatting = True .AdjustColumnWidth = True .FillAdjacentFormulas = False .RefreshStyle = xlInsertEntireRows .SavePassword = False .SaveData = True .TextFilePromptOnRefresh = False .TextFileParseType = xlDelimited .TextFileStartRow = 1 .TextFilePlatform = 65001 .TextFilePlatform = xlWindows .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = True .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileTrailingMinusNumbers = False .TextFileColumnDataTypes = Array(9, 9, 9, 9, 2, 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9) .Refresh .Parent.Names(.Name).Delete .Delete End With End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

1)QueryTableではなく[ファイル]-[開く]Openメソッドで通常に開くとセル内改行で処理されるか。 2)セル内改行・・フィールド内改行が含まれているデータは""ダブルクォートで囲まれているか。  ex)・・,"A(改行)B(改行)C",・・ 3)他に、セル内に『,』が含まれているデータはあるか。また、それは""ダブルクォート囲みか。  ex)・・,"1,234",・・ 4)CSVファイルのデータ量はどれくらいか。  ex)y行×x列 5)『すでに記述したコードを生か』す事は必須条件か。 上記の確認事項の結果次第でアドバイスが変わります。 (1)yes なら、簡単な方法として Workbooks.Openメソッドで別ファイルで開き必要なデータをコピーペーストする案が考えられます。 この時Application.ScreenUpdatingを制御して開いている事を意識させないようにします。 『すでに記述したコードを生か』さなくても良いならこの方法が最も素直な処理です。 (4)が必須だと、QueryTableで取り込む前に、テキストベースで一旦開き、改行文字をスペースなどにReplaceして保存し、 あらためてQueryTableでの取り込みを実行するようにします。 過去、同様な事例を参考にしてみてください。 http://okwave.jp/qa/q5972724.html?order=asc # このケースでは必要データが2行×2ファイルなので、改行文字Replace&QueryTable はオーバースペックで、 # 素直にOpenメソッドを使ったほうが良いケースでしたが。 (1),(2)ともnoだと、ちょっと難易度が上がりますね。 その時はダミーで良いのでサンプルのデータがあるほうがアドバイスし易いです。

infoafford
質問者

補足

上記アドバイスありがとうございます。 まずは(1)から試したいと思うのですが、なにぶん初心者なもので記述の仕方がわかりません。 私が書いたソースのどこを変更すれば良いか、アドバイスを頂けませんでしょうか。お手数をおかけして申し訳ございません

その他の回答 (3)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

そもそもの案件と全く違う内容の質問を補足欄でだらだらと続けられても困惑します。 勿論こちらに応える義務はないとは言え。 しかもその追加内容に誤りがあったり、断片的な情報しか提示されないなら 有効なアドバイスは難しいです。 >Range("C6").Value = Evaluate("SUMPRODUCT((Sheet7!A2:A3204=B6)*(Sheet7!K2:K3204=K16))") このコードがシートモジュールに置いたコードなら、 『Range("C6")』、『B6』、『K16』はそのシートのセルを参照します。 標準モジュールに書いてあれば、コード実行時のActiveSheetを参照します。 処理が複数シートにまたがっているのなら、そういった参照関係に気をつけてください。 どちらにしても紛れがないのは 例えば Sheets("Sheet1").Range("C6").Value = Evaluate("SUMPRODUCT((Sheet7!A2:A3204=Sheet1!B6)*(Sheet7!K2:K3204=Sheet1!K16))") ..などとSheetを明示する事です。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

ゃ? With Sheets("Sheet7")   Range("F6").Value = WorksheetFunction.CountIf(.Range("A2:A3000"), .Range("A6")) End With 普通にCountIf関数で良いと思われるのですけれども。

infoafford
質問者

補足

すみません、ご迷惑ばかりで…。 確かに、お書き頂いた上記の方法でカウントできました。 しかしながら…。 複数条件でカウントしたいのです。 なので、sumproductではないかと。 With Sheets("Sheet7") Range("C6").Value = Evaluate("SUMPRODUCT((Sheet7!A2:A3204=B6)*(Sheet7!K2:K3204=K16))") End With B6がトマトだとして、K16が大(大きさ)だとします。 ちなみに、上記ではきちんとカウントされませんでした。 すみません、最後のお力添えを頂けないでしょうか。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

(1)を言い換えると。 手作業でExcelメニューの[ファイル]-[開く]から目的のCSVファイルを開いた場合、 セル内改行はセル内改行のままで開いて、列がずれたりしませんか? 確認してください。 もし、ずれる事なく正常に開く事ができるなら、 >Workbooks.Openメソッドで別ファイルで開き必要なデータをコピーペーストする案が考えられます。 コード化については、 上記作業をマクロ記録してみてください。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2012/10/18 ユーザー名 : end-u ' '   Cells.Select   Selection.ClearContents   Workbooks.Open Filename:="C:\issue_export.csv"   Range("E:E,G:G,R:T,V:AA").Select   Range("V1").Activate   Selection.Copy   Windows("issue_export.xls").Activate   Range("A1").Select   ActiveSheet.Paste   Application.CutCopyMode = False   Windows("issue_export.csv").Activate   ActiveWindow.Close End Sub ..のようなものが録れるはずです。 これをブラッシュアップして以下のように修正します。 Sub try()   Dim ws As Worksheet   Application.ScreenUpdating = False   Set ws = ThisWorkbook.Sheets("Sheet7")   ws.UsedRange.Clear   With Workbooks.Open(Filename:="C:\issue_export.csv")     .Sheets(1).Range("E:E,G:G,R:T,V:AA").Copy ws.Range("A1")     .Close savechanges:=False   End With   Application.ScreenUpdating = True End Sub # ついでに。 # >(4)が必須だと、QueryTableで取り込む前に、... # (5)が必須だと、...の間違いでしたorz

infoafford
質問者

補足

ありがとうございます。 上記の記述で問題なくインポートできました。 実はそこから集計を取りたいと考えておりまして… 例えば、A列にある「トマト」というキーワードが何個あるかを集計しようとします。 Private Sub CommandButton1_Click() Dim ws As Worksheet Application.ScreenUpdating = False Set ws = ThisWorkbook.Sheets("Sheet7") ws.UsedRange.Clear With Workbooks.Open(Filename:="C:\issue_export.csv") .Sheets(1).Range("E:E,G:G,R:T,V:AA").Copy ws.Range("A1") .Close savechanges:=False End With Application.ScreenUpdating = True End Sub Private Sub CommandButton2_Click() Range("F6").Value = Evaluate("SUMPRODUCT((Sheet7!$A$2:$A$3000=Sheet7!$A$6)") End Sub ※A6がトマトだとします 上記ですと、#VALUE!と返ってきてしまします。 大変申し訳ございませんが、ご教示いただけますと幸いです。

関連するQ&A

  • 【ExcelVBA】空白ではないセルを選択する

    こちらで、Sheetをcsv出力する際、 空白のセルを区切る「,」が入ってしまう件を質問いたしました。 http://okwave.jp/qa/q8886514.html 計算結果が空白でも、そのセルは「文字数が0の文字列としてデータ」がある状態 という事は理解ができました。 そこで、A~C列の「文字数が0の文字列」ではないセルを選択して、 その範囲をSheet2にペースト、そのSheet2をcsvで保存すればよいと思いました。 この部分をマクロに組み込みたいのですが、 A~B列で「文字数が0の文字列」ではないセルを選択という指示をする部分がわかりません。 以下は、マクロの記録を使って作成しました。 Sub csv送信用() ' ' csv送信用 Macro ' ' Sheets("Sheet2").Select Selection.QueryTable.Delete Selection.ClearContents With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Documents and Settings\***\My Documents\***.csv" _ , Destination:=Range("$A$1")) .Name = "***_2" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With Sheets("Sheet1").Select Columns("A:C").Select Selection.Copy Sheets("csv_copy").Select ActiveSheet.Paste Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\***\My Documents\csv_copy.csv", FileFormat:= _ xlCSV, CreateBackup:=False Application.DisplayAlerts = True Sheets("Sheet1").Select End Sub この Columns("A:C").Select Selection.Copy の、部分を「A~B列で「文字数が0の文字列」ではないセルを選択」してコピーにするとよいのだと思うのですが、 どのように書いたらよいでしょうか。 Excel2007です。 宜しくお願いいたします。

  • マクロのWEBデータの取り込み

    下のように書いてマクロを実行したのですが(EXCEL2003) Sheet1のA1からDP1000のデータをクリアにしてから URLのデータを取り込んで D列の最終行の値を Sheet2のA列の日付+1行に書き込みたいのですが Sheet1のA1からDP1000のデータをクリアにする前に D列の最終行の値を Sheet2のA列の日付+1行に書き込んでしまいます。 あとConst Col = 4の部分が 同じ範囲内で宣言が重複しています。 とエラーになります。 どこが悪いのかがわかりません。 よろしくお願いします。 Sub 抽出() Worksheets("Sheet1").Range("A1:DP1000").Value = "" nen = InputBox("読み込む年度、西暦4桁(半角)読み込む月(半角)を入力") tuki = InputBox("読み込む日(半角)を入力") strUrl= "URL;http://○○○○★★★★DATFR=#01&DATTO=#$&MSCD=1431&BMCD=30&MENU_ID=2&MENU_ID1=2" strnen = Mid(Str(nen), 2) strtuki = Mid(Str(tuki), 2) strUrl = Replace(Replace(strUrl, "$", strtuki), "#", strnen) strName = Replace(Replace(strName, "$", strtuki), "#", strnen) With Worksheets("野菜").QueryTables.Add(Connection:=strUrl, Destination:=Worksheets("Sheet1").Range("A1")) .Name = strtuki .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=True End With Const Col = 4 Dim Rw As Long With Sheets("Sheet1") Rw = .Cells(Rows.Count, Col).End(xlUp).Row Sheets("Sheet2").Range("A" & tuki + 1 & ":A" & tuki + 1).Value = _ .Range(.Cells(Rw, 4), .Cells(Rw, 4)).Value End With strUrl= "URL;http://○○○○■■■■DATFR=#01&DATTO=#$&MSCD=1431&BMCD=30&MENU_ID=2&MENU_ID1=2" strnen = Mid(Str(nen), 2) strtuki = Mid(Str(tuki), 2) strUrl = Replace(Replace(strUrl, "$", strtuki), "#", strnen) strName = Replace(Replace(strName, "$", strtuki), "#", strnen) With Worksheets("Sheet3").QueryTables.Add(Connection:=strUrl, Destination:=Worksheets("Sheet3").Range("A1")) .Name = strtuki .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=True End With Const Col = 4 Dim Rw As Long With Sheets("Sheet3") Rw = .Cells(Rows.Count, Col).End(xlUp).Row Sheets("Sheet4").Range("A" & tuki + 1 & ":A" & tuki + 1).Value = _ .Range(.Cells(Rw, 4), .Cells(Rw, 4)).Value End With End Sub

  • VBA セル内の改行を取り除くには?

    セルの値を Workbooks(rb).Sheets(rs).Cells(rr, rc).Value で取得しています。 読み出しているセルには、改行コードが入っています。 改行コードは vb_lf でしたっけ? これを取り除くにはどうすればいいでしょうか? trim関数じゃないし、replaceとかsubstituteとかありましたっけ?

  • Excelマクロ 繰り返し?の設定方法を教えて下さ

    BetMasterという競馬ソフトに記述されている 「TXT\2」のデータを抽出し、Sheets("出馬表集計")に貼り付け、 「TXT\1」のデータを抽出し、Sheets("結果集計")に貼り付ける 以下のようなマクロを組んでいます。1日終わるごとにTXT\2とTXT\1を作成してこの集計をしていたのですが、約1年間サボってしまい100回近く、このマクロを作動させなければならなくなりました。 そこで、TXT\1~100まで作成して、TXT\2とTXT\1の貼り付けが終わったら、「TXT\4とTXT\3」、「TXT\6とTXT\5」、「TXT\8とTXT\7」...............と「TXT\100とTXT\99」まで繰り返し抽出と貼り付けを行うようにしたいのですがどうしたらよいでしょうか。 問題は、50回繰り返すことと、2回目以降は前回終了の次の行に貼り付けるという点です。 よろしくお願い致します。 'BetMasterから出馬表データの取り込み ActiveWorkbook.Worksheets.Add With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\BetMaster\TXT\2.", Destination:=Range("A1")) .Name = "1." .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = xlWindows .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .Refresh BackgroundQuery:=False End With 'Sheets("出馬表集計")に貼り付け Cells.Select Application.CutCopyMode = False Selection.Copy Sheets("出馬表集計").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select ActiveWindow.SelectedSheets.Delete 'BetMasterから結果データの取り込み ActiveWorkbook.Worksheets.Add With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\BetMaster\TXT\1.", Destination:=Range("A1")) .Name = "1." .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = xlWindows .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .Refresh BackgroundQuery:=False End With 'Sheets("結果集計")に貼り付け Cells.Select Application.CutCopyMode = False Selection.Copy Sheets("結果集計").Select   Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select ActiveWindow.SelectedSheets.Delete

  • エクセル マクロ 印刷指定

    マクロが解りません。色々調べてマクロの記録を使って、下記のマクロを作りました。 1枚目の印刷を2枚目、3枚目印刷として書き足してみました。 しかしエラーが出て2番目のシートからの印刷ができません。 Sub 連絡票印刷() ' ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+p ' Sheets("連絡票").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("連絡票").Range("p1").Value, To:=Sheets("連絡票").Range("q1").Value, Collate:=True, IgnorePrintAreas:=False Sheets("予定表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("予定表").Range("y1").Value, To:=Sheets("予定表").Range("z2").Value, Collate:=True, IgnorePrintAreas:=False Sheets("配車表").Select ActiveWindow.SelectedSheets.PrintOut From:=Sheets("配車表").Range("s1").Value, To:=Sheets("配車表").Range("t2").Value, Collate:=True, IgnorePrintAreas:=False Dim str As String str = Worksheets("連絡票").Range("r1") Worksheets(str).Select End Sub いろいろ解らないなりに書き換えをしてみましたが、やっぱり2番目のシートから印刷ができません。 教えていただけませんでしょうか。

  • セル変更2回目以降マクロが走らない

    office2010 セル値変更でマクロ実行の件で質問です。 macroというシートのA11セルがプルダウンリストになっていて、その値を変更したらマクロ実行という構成を作成しました。 下記はmacroというシートに記載したマクロ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$11" Then Exit Sub Calculate Macro4 End Sub 下記は標準モジュールに記載したマクロ Sub Macro4() ' 'macroシートB11に表示されるNo.で抽出 Application.EnableEvents = False Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = True Sheets("Sheet3").Visible = True Sheets("Sheet4").Visible = True Sheets("work").Visible = True Sheets("Sheet3").Select Cells.Select Selection.ClearContents Selection.ClearContents Sheets("Sheet2").Select Cells.Select Selection.ClearContents Selection.ClearContents Sheets("Sheet1").Select Cells.Select Selection.AutoFilter Selection.AutoFilter ActiveSheet.Range("$A:$BA").AutoFilter Field:=3, Criteria1:=Sheets("macro").Range("B11") Sheets("kisyu_work").Select Cells.Select Selection.ClearContents Sheets("Sheet1").Select Columns("F:F").Select Selection.SpecialCells(xlCellTypeVisible).Select Application.CutCopyMode = False Selection.Copy ActiveWindow.ScrollWorkbookTabs Position:=xlLast Sheets("kisyu_work").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "kisyu_work!R1C1:R1048576C1", Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="", TableName:= _ "ActiveSheet.Name", DefaultVersion:=xlPivotTableVersion14 Cells(1, 1).Select With ActiveSheet.PivotTables("ActiveSheet.Name").PivotFields("V_KISYU_CD") .Orientation = xlRowField .Position = 1 End With Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row - 2).Select ' Selection.Copy ActiveWindow.ScrollWorkbookTabs Position:=xlLast Sheets("kisyu_work").Select Range("B1").Select ActiveSheet.Paste ' Range("C1:C" & Range("B" & Rows.Count).End(xlUp).Row).Value = "=INDEX(M_KISYU!C[5],MATCH(RC[-1],M_KISYU!C,0))" Sheets("macro").Select End Sub A11セルの値を変更するとMacro4は実行されます。 しかしながら、2回以上続けてA11の値を変更するとMacro4が動作しません。 なぜなのでしょうか? なお、プルダウンリストの構成をやめると、連続してA11セル値変更しても動作します。

  • VBAを使って一つのセル内で文書を改行

    現在VBAを使ってシート1の内容をシート2にコピーさせるもの作りました。↓ s.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") これでさらにシート2にコピーしたないようは 同じセル内で改行したいのです。 いわばAlt+Enterキーみたいな機能なのですが・・・ つまり出力がシート1の指定セルの内容が 『新年あけましておめでとう』なのですが、シート2は 『新年あけまして  おめでとう』という内容を出力したいのですが、 改行のプログラムはわかりますでしょうか??m(_ _)m 簡単なプログラムでもいいのです。 もしわかれば他にも応用したいので、この例で行くと『て』という文字を判別して『て』という文字があったらその文字のあとを改行させたいのですができますでしょうか?

  • より単純なマクロにしたいのですが・・・

    Dim Ws1 As Worksheet, Ws2 As Worksheet Dim i As Long Set Ws1 = Worksheets("名簿") Set Ws2 = Worksheets("表面") For i = Ws1.Range("B2").Value To Ws1.Range("B4").Value Ws2.Range("HA2").Value = i Ws2.Select If Range("HD2").Value = 1 Then Range("HG2").Select ActiveCell.FormulaR1C1 = "1" Range("HD2").Value = 2 Then Range("HG2").Select ActiveCell.FormulaR1C1 = "1" Sheets(Array("表面", "裏面")).Select ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" Range("HG2").Select ActiveCell.FormulaR1C1 = "2" ElseIf Range("HD2").Value = 3 Then Range("HG2").Select ActiveCell.FormulaR1C1 = "1" Sheets(Array("表面", "裏面")).Select ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" Range("HG2").Select ActiveCell.FormulaR1C1 = "2" Sheets(Array("表面, "裏面")).Select ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" Range("HG2").Select ActiveCell.FormulaR1C1 = "3" End If Sheets(Array("表面", "裏面")).Select ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" Next Sheets("名簿").Select Range("F1").Select Range("C5").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Range("A1").Select End Sub "表面"シートのHA2に任意の印刷No.が入っていき、"表面"シートのHD2にそれぞれ任意の印刷No.に応じて1~3の数字が振られているためその割り振り数字が入っていきます。HD2の数字が1の時は、HG2セルに1の数字が順に入り印刷(表面と裏面は印刷設定で両面になっています)し、HD2の数字が2の時は、HGセルに1の数字が入り印刷、次にHGセルに2の数字が入り印刷。HD2の数字が3の時は、HGセルに1の数字が入り印刷、次にHGセルに2の数字が入り印刷、次にHGセルに3の数字は入り印刷というマクロになっています。実際に動かしてみると 非常に重いため、よりスマートにできるようなコードを考えているのですがこれが私の限界です。どこでも良いので、簡潔にできる所があればアドバイスをいただけると幸いです。

  • エクセルマクロの分割方法について

    Sub リスト登録() ' ' Macro3 Macro ' マクロ記録日 : 2008/6/2 ' ActiveSheet.Unprotect Password:="1234" If Range("G33").Value > 5 Then Sheets("リスト").Select ActiveSheet.Shapes("AutoShape 44").Select Selection.Copy Sheets("シート").Select Range("A15").Select ActiveSheet.Paste End If Dim Btn As Integer Dim strMsg As String strMsg = "リストに登録しますか?" Btn = MsgBox(strMsg, vbYesNo + vbQuestion, "MsgBox") If Btn = vbNo Then Dim YU As Shape For Each YU In ActiveSheet.Shapes If YU.Type = msoAutoShape Then YU.Delete End If Next If Btn = vbYes Then End If ActiveSheet.Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True Range("C11").Select End End If Dim newRange1 As Range, newRange2 As Range, newRange3 As Range Select Case Sheets("").Range("B3").Value Case 1 Set newRange1 = Sheets("リスト").Range("I6") Set newRange2 = Sheets("リスト").Range("AH6") Set newRange3 = Sheets("リスト").Range("AI6") 中略 Case 1000 Set newRange1 = Sheets("リスト").Range("I1005") Set newRange2 = Sheets("リスト").Range("AH1005") Set newRange3 = Sheets("リスト").Range("AI1005") ActiveWorkbook.Save Case Else End Select Application.ScreenUpdating = False Sheets("シート").Range("G8,G10,G12:G23,G25:G29,G31:G32").Copy newRange1.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True newRange1.UnMerge Sheets("シート").Range("D34").Copy newRange2.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Sheets("シート").Range("I29").Copy newRange3.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Sheets("シート").Select Range("C11").Select Range("D34,G8:G32,I29").Select Selection.ClearContents Range("C11").Select Dim SP As Shape For Each SP In ActiveSheet.Shapes If SP.Type = msoAutoShape Then SP.Delete Range("D34:K34").Select Application.CutCopyMode = False Selection.Merge Range("B3").Select End If Next ActiveSheet.Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub 上記のマクロを作成しましたが、64Kを超えてしまう為、分割したいのですが、どのように分割すればよいのか方法がわかりません、どなたかお分かりの方がいらっしゃいましたら宜しくお願いします。 マクロシート1~2~3といったつなぎの構文がわかりません宜しくお願い致します。

  • エクセル VBA 集計方法

    各シート毎に下記の内容にて集計をしたいのですが、A2のセルにデータがない場合集計をしない方法がわからないのでご存じの方宜しくお願い致します。 Sheets("Sheet1").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Sheets("Sheet2").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Sheets("Sheet3").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True End Sub