首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel列表,VBA从单元格中添加

Excel列表,VBA从单元格中添加
EN

Stack Overflow用户
提问于 2017-09-27 22:05:06
回答 2查看 765关注 0票数 1

我正在建立一个CSV文件的产品进口到一个网络商店。由于产品有不同的属性(大小和/或颜色),我需要在文件中添加这些变量。总之,我有大约800行,需要填补空白,如下图所示。变化的范围在3到5之间。

我一直在努力让一些VBA代码起作用。

代码语言:javascript
复制
Sub FillVariations()
'
' Makro8 Makro
'

' Find row with content and copy

    Selection.End(xlDown).Select
    Selection.Copy

' Move one step down

    ActiveCell.Offset(1, 0).Activate

' Add =" <ctrl-v> " & " - " & az<samerow>

    ActiveCell.FormulaR1C1 = _
        "=""Axelväska/handväska, Crazy Horse, RCH7"" & "" - "" & RC[47]"

' Move one step down

    ActiveCell.Offset(1, 0).Activate

End Sub

Ctrl是思想,但(显然)不起作用.

基本上:往下移动一排。如果单元格有内容-复制它。往下挪一排。粘贴内容,添加空格、连字符和另一个空格,然后粘贴同一行AZ列中的内容。往下挪一排。如果单元格为空,则粘贴先前复制的内容,添加空格、连字符和空格,并粘贴新行中的AZ内容.

我非常感谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-27 22:48:25

宏中缺少的主要内容是数据的循环,空单元格的循环。

如果您计划不止一次地使用它,您也可能希望更仔细地选择正确的列,因为它目前是从选定的任何单元格开始的。

也许是这样的:

代码语言:javascript
复制
Sub FillVariations()
' 
' Makro8 Makro
'
'figure out how far down data goes
Range("AZ2").Select
Selection.End(xlDown).Select
Dim endrow
endrow = Selection.Row

'always start in the correct column
Range("E1").Select
Selection.End(xlDown).Select


Dim basename

'loop through all data
Do While ActiveCell.Row < endrow
    'Store cell of current base name
    basename = Selection.Address

    'loop through empty cells and set formula if cell isn't empty
    Do While True
        ActiveCell.Offset(1, 0).Activate

        'if next cell isn't empty, isn't past the end of the list, go to outer loop
        If ActiveCell.Formula = "" And ActiveCell.Row <= endrow Then
            ActiveCell.Formula = "=CONCATENATE(" & basename & ","" - ""," & "AZ" & Selection.Row & ")"
        Else
            Exit Do
        End If
    Loop
Loop

End Sub
票数 0
EN

Stack Overflow用户

发布于 2017-09-28 04:01:17

您的方法的一个明显问题是,一个工作表单元格中可以存储多少个字符(32,767个最大?);当然,这对您来说已经足够了,但是如果不是.

另一个想法是,您正在尝试设置它,就像记录一个“手工”执行它的宏,而不是真正地自动化这个过程。

无论如何,这(与任何必要的修改)应该有效地做到这一点。可以将sCSV字符串保存为文本/csv文件。

代码语言:javascript
复制
Private Sub Build_String_CSV()
    Dim iRowStart As Long
    Dim iRowEnd As Long
    Dim i As Long
    Dim sCSV As String

    iRowStart = 1 ' or whatever
    iRowEnd = 800 ' or whatever
    ' Note that the values above can be found dynamically, of course
    For i = iRowStart To iRowEnd
            sCSV = sCSV & " - " & ActiveSheet.Range("AZ" & i)
    Next
    sCSV = sCSV = Mid(sC,SV, 4, 10000000) ' remove the very first 3 characters: space-dash-space
    ' Save the sCSV string as csv file
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46457934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档