0

SalesForce に一括アップロードするために、Excel スプレッドシートの連絡先データをサニタイズしています。ただし、SalesForce は 100 連絡先のワークシートしか管理できません。たとえば、700 行のワークシートを、それぞれ 100 のセル参照を含む 7 つのワークブックに分割できるマクロが必要です。

私はこれを行う方法についていくつかの調査を行いましたが、これがこの目的を支援するための StackOverflow に関する唯一の参照であると信じています: Solution for Dividing WorkSheet into Multiple Files with vba/excel/c#

また、このソリューションは有望に見えますが、まだ理解するのに十分なVBAを理解していません: https://superuser.com/questions/57157/can-i-split-a-spreadsheet-into-multiple-files-based -on-a-column-in-excel-2007

ただし、選択した回答は実際には私の目的には役立ちません。誰かが私を正しい方向に向けることができますか/これを行うためのコマンドを列挙できますか?

これが私がこれまでに持っているものです-これは適切な数のワークブックを生成するようです. ここで、100 行をそれぞれの行にカット アンド ペーストする方法を理解する必要があります。

    Sub Macro12()

    Dim wb As Workbook
    Dim p As Double
    Dim p_quotient As Double
    Application.ScreenUpdating = False

    p = ActiveSheet.UsedRange.Rows.Count
    p_quotient = p / 100
    p_quotient = Application.WorksheetFunction.RoundUp(p_quotient, 0)

    For i = 1 To p_quotient
        Workbooks.Add
        Set wb = ActiveWorkbook
        ThisWorkbook.Activate
        wb.SaveAs ThisWorkbook.Path & "test" & i
        wb.Close

    Next i
    Application.ScreenUpdating = True
    Set wb = Nothing


End Sub

これが私が今使っているコードです:

Sub Macro12()

  Dim wb As Workbook
      Dim ThisSheet As Worksheet
      Dim NumOfColumns As Integer
      Dim RangeToCopy As Range
      Dim WorkbookCounter As Integer
      Dim myDate As String
      myDate = Format(Date, "yyyy.mm.dd")

      Set ThisSheet = ThisWorkbook.ActiveSheet
      NumOfColumns = ThisSheet.UsedRange.Columns.Count
      WorkbookCounter = 1


      For p = 1 To ThisSheet.UsedRange.Rows.Count Step 101
        Set wb = Workbooks.Add

        Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + 100, NumOfColumns))
        RangeToCopy.Copy wb.Sheets(1).Range("A1")

        wb.SaveAs ThisWorkbook.Path & "\Salesforce Lead Conversion " & myDate & " Part " & WorkbookCounter & ".xls"
        wb.Close
        WorkbookCounter = WorkbookCounter + 1
      Next p

      Application.ScreenUpdating = True
      Set wb = Nothing

  End Sub
4

2 に答える 2

2

あなたの論理に従えば、これでうまくいくはずです:

  Sub Macro12()

      Dim wb As Workbook
      Dim ThisSheet As Worksheet
      Dim NumOfColumns As Integer
      Dim RangeToCopy As Range
      Dim WorkbookCounter As Integer

      Application.ScreenUpdating = False


      Set ThisSheet = ThisWorkbook.ActiveSheet
      NumOfColumns = ThisSheet.UsedRange.Columns.Count
      WorkbookCounter = 1

      For p = 1 To ThisSheet.UsedRange.Rows.Count Step 101
        Set wb = Workbooks.Add

        Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + 100, NumOfColumns))
        RangeToCopy.Copy wb.Sheets(1).Range("A1")

        wb.SaveAs ThisWorkbook.Path & "\test" & WorkbookCounter
        wb.Close
        WorkbookCounter = WorkbookCounter + 1
      Next p

      Application.ScreenUpdating = True
      Set wb = Nothing


  End Sub
于 2013-06-05T20:59:06.320 に答える
0

これを行うには多くの方法がありますが (VBA を使用すると非常に簡単な場合もあります)、VBA を必要としない最も簡単な方法は次のとおりです。

  • 追加の「ヘルパー」列を追加します
  • その列に、次の式を入力します=FLOOR(ROW()/100,1)
  • データにフィルターをかける

ここで、ヘルパー列の各数値 0、1、2、3、...、7 をフィルター処理します。

各セットには次の 100 レコードが含まれます。それらをコピーして新しいワークブックに貼り付け、必要に応じて保存します。また、この時点から、その最後の部分を実行するためのクイック マクロを記録するのは本当に些細なケースです。

あなたが求めていたものとは正確には異なりますが、そのシンプルさが役に立てば幸いです.

于 2013-06-05T19:20:51.003 に答える