RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1085277
Accepted
Nikita Shuvalov
Nikita Shuvalov
Asked:2020-02-20 22:17:29 +0000 UTC2020-02-20 22:17:29 +0000 UTC 2020-02-20 22:17:29 +0000 UTC

宏选择另一个范围内的单元格

  • 772

有一个文件,需要根据列和行在第二张纸上选择一个单元格。工作表 2 上的位置可能不同,但所有内容都仅来自第二张工作表的列表。如何正确注册宏,我试着像这样注册

Lastrow = ThisWorkbook.Sheets("лист1").Cells(Rows.Count, 1).End(xlUp).Row
Lastcolumn = ThisWorkbook.Sheets("лист1").Cells(4, Columns.Count).End(xlToLeft).Column
x = ThisWorkbook.Sheets("лист2").Cells(2, 1)
Do While y = Lastcolumn
   For Z = 1 To Lastrow
   For y = 1 To Lastcolumn
        If ThisWorkbook.Sheets("лист1").Cells(Z, 1) = x And ThisWorkbook.Sheets("лист1").Cells(Z, y) > 0 And IsNumeric(ThisWorkbook.Sheets("лист1").Cells(Z, y)) Then
        ThisWorkbook.Sheets("лист2").Cells(5, y).Interior.Color = RGB(240, 150, 0)
         y = y + 1
           Exit For
        End If
    Next y
    Next

但这不起作用。

图片中的一个例子。][一]

2

您只需要更改单元格的格式,因此可能还有公式

Ps 有一个解决方案,但是在将其转换为工作表单时我不明白,这太多了,但是

Sub Main()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Dim y As Long
Dim x As Integer
Dim a As Variant

With Sheets("Лист2")
    a = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
    For y = 2 To UBound(a, 1)
        Set d.Item(a(y, 1)) = CreateObject("Scripting.Dictionary")
    Next
End With

With Sheets("Лист1")
    y = .Cells(.Rows.Count, 1).End(xlUp).Row
    x = .Cells(1, .Columns.Count).End(xlToLeft).Column
    a = .Range(.Cells(1, 1), .Cells(y, x))
    Dim v As Variant
    For Each v In d.Keys
        If WorksheetFunction.CountIfs(.Columns(1), v) > 0 Then
            y = WorksheetFunction.Match(v, .Columns(1), 0)
            For x = 2 To UBound(a, 2)
                If Not IsEmpty(a(y, x)) Then
                    d.Item(v).Item(x) = 0
                End If
            Next
        End If
    Next
End With

Dim r As Range
With Sheets("Лист2")
    For y = 1 To d.Count
        For Each v In d.Items()(y - 1).Keys
            If r Is Nothing Then
                Set r = Cells(y + 1, v)
            Else
                Set r = Union(r, Cells(y + 1, v))
            End If
        Next
    Next

    .Cells.Interior.Pattern = xlNone
    If Not r Is Nothing Then
        r.Interior.Color = 65535
    End If
End With

End Sub 是否可以编写代码以仅垂直和水平搜索匹配项,并选择确切需要哪一列或哪一行?

excel
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Akina
    2020-02-28T17:48:25Z2020-02-28T17:48:25Z

    这是绘制表格的宏示例:

    Sub x()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Set sh1 = ThisWorkbook.Sheets("Лист1")
    Set sh2 = ThisWorkbook.Sheets("Лист2")
    Dim tmp1()
    ' Копируем данные с листа в массив для ускорения обработки '
    tmp1 = sh1.UsedRange.Value
    tmp2 = sh2.UsedRange.Value
    Dim i As Integer, j As Integer, k As Integer
    ' Перебираем строки листа назначения '
    For i = LBound(tmp2) + 1 To UBound(tmp2)
        ' Перебираем исходные данные, ищем строку с тем же продуктом '
        For j = LBound(tmp1) + 1 To UBound(tmp1)
            If tmp1(j, 1) = tmp2(i, 1) Then
                ' Если нашли - запоминаем номер '
                k = j
                Exit For
            End If
        Next j
        ' Сканируем строку исходных данных на предмет наличия значения '
        For j = LBound(tmp1, 2) + 1 To UBound(tmp1, 2)
            If Not IsEmpty(tmp1(k, j)) Then
                ' Если нашли - красим соотв. ячейку '
                sh2.Cells(i, j).Interior.Color = vbYellow
            End If
        Next j
    Next i
    End Sub
    

    在水平方向上,比较是在循环中执行的。通过索引沿垂直方向进行了愚蠢的匹配,但您也可以组织搜索(添加另一个循环 - 我太懒了)。

    数组更容易使用,最重要的是,它比单元更快。而且桌子越胖,差别就越大。您也可以ScreenUpdate=False添加,这是一个额外的加速。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5