【问题标题】:Use variable to denote column letter in range使用变量来表示范围内的列字母
【发布时间】:2018-11-12 10:33:06
【问题描述】:

代码片段:
我使 A 中的值等于 B 中的值。

Set A = Workbooks("SwbA").Worksheets("SwsA").Range("A1:A10")
Set B = Workbooks("twbB").Worksheets("twsB").Range("G1:G10")
A.value = B.value

我要声明一个变量比如

Dim col AS STRING
col = "A" 

所以我可以为此做点什么 -

Set A = Workbooks("SwbA").Worksheets("SwsA").Range(col&1:col10)

请注意,我不想这样做 -

col = "A1:A10" '--> this works, for other reasons I want to manipulate Column letter only

【问题讨论】:

  • 我不想添加完整的答案,因为我知道这一定是一个重复的问题。使用数字(col A=1、B=2 等)声明您的列。对列A:J 的非限定引用将是:Debug.Print Range(Cells(1, 1), Cells(1, 10)).EntireColumn.Address。好的做法是使用可以在 With....End With 块内完成的工作簿和工作表名称来限定 RangeCells
  • 另一种方法是获取第一列,计算您需要多少额外列并调整范围Debug.Print Columns(1).Resize(, 10).Address
  • 你可以使用Set B = Workbooks("SwbB").Worksheets("SwsB").Range(A.Offset(ColumnOffset:=6).Address)
  • 感谢您的回答。我没有专业知识来采纳你的建议。我正在从中学习。

标签: excel vba range


【解决方案1】:

我看不到你的图片,但你可以看到

 Dim Col As String
 Col = "A"
 Dim r As Range
 Set r = Range(Col & "1:" & Col & "10")

【讨论】:

  • 高清,我为丢失的图像添加了行。我听从了你的建议 - Set A = Workbooks("SwbA").Worksheets("SwsA").Range(col&"1:"&col"10")。它将粘贴复制到所有列,不限于 col: A。但是到正确的行。
  • 你缺少一个 & 应该设置 A = Workbooks("SwbA").Worksheets("SwsA").Range(col & "1:" & col & "10")跨度>
  • 高清,我的帖子中有错字。我的实际代码如您所述- Workbooks("SwbA").Worksheets("SwsA").Range(col & "1:" & col & "10") 。此复制粘贴到相同行的所有列。
【解决方案2】:

栏目问题

当您将列声明为变体时,您可以使用 LetterNumber。然后可以使用 Cells 属性。

行数

Sub NumberOfRows()

  Const cW1 As String = "twbB"  ' Source Sheet or Book
  Const cW2 As String = "SwbA"  ' Target Sheet or Book

  Const cCol1 As Variant = "G"  ' Source Column Letter/Number
  Const cCol2 As Variant = "A"  ' Target Column Letter/Number
  Const cFirst As Long = 1      ' First Row
  Const cLast As Long = 10      ' Number of Rows

  Dim rngB As Range             ' Source Range
  Dim rngA As Range             ' Target Range

  Set rngB = Workbooks(cW1).Worksheets(cW1).Cells(cFirst, cCol1).Resize(cLast)
  Set rngA = Workbooks(cW2).Worksheets(cW2).Cells(cFirst, cCol2).Resize(cLast)

  rngA.Value = rngB.Value

End Sub

最后一行

Sub LastRow()

  Const cW1 As String = "twbB"  ' Source Sheet or Book
  Const cW2 As String = "SwbA"  ' Target Sheet or Book

  Const cCol1 As Variant = "G"  ' Source Column Letter/Number
  Const cCol2 As Variant = "A"  ' Target Column Letter/Number
  Const cFirst As Long = 1      ' First Row
  Const cLast As Long = 10      ' Last Row

  Dim rngB As Range             ' Source Range
  Dim rngA As Range             ' Target Range

  Set rngB = Workbooks(cW1).Worksheets(cW1).Range(Cells(cFirst, cCol1), Cells(cFirst, cCol1))
  Set rngA = Workbooks(cW2).Worksheets(cW2).Range(Cells(cFirst, cCol2), Cells(cFirst, cCol2))

  rngA.Value = rngB.Value

End Sub

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多