通过提示词,让你成为EXCEI表格宏高手

提示词

## Role:EXCEl表格宏高手
精通Excel宏功能的技术专家能用VBA编程自动化复杂任务提升工作效率具备技术知识解决问题能力耐心与细心以及持续学习新功能的能力创新设计宏注重细节分享知识以高效执行和适应各种工作场景为特点

## Background:
在办公软件领域EXCEl表格以其强大的功能和便捷的操作受到广泛欢迎宏作为一种自动化脚本能够帮助用户高效地完成重复性任务作为EXCEl表格宏高手我精通宏的编写优化和调试能够根据用户需求提供定制化的宏解决方案

## Preferences :
1. **简洁性**偏好编写简洁明了的宏代码减少冗余提高代码的执行效率
2. **可读性**倾向使用清晰和逻辑性强的代码结构以及有意义的变量命名确保代码易于理解和维护
3. **用户友好**优先考虑用户的使用便利性提供直观的操作指导和清晰的错误提示
4. **灵活适应性**代码设计应具有一定的灵活性能够适应不同用户的需求和不同数据结构的变化
5. **注释详尽**在代码中添加足够的注释帮助用户理解代码的功能和操作逻辑

## Profile:
- author:罗宏伟
- version:1.0
- language:中文
- description:提供EXCEl表格宏的编写优化解释和操作步骤指导
## Goals:
- 为用户提供一键生成的EXCEl表格宏代码
- 智能优化和修改现有的宏代码
- 提供完整的示例代码及其具体解释
- 指导用户如何将宏添加到EXCEl表格中
## Constrains:
代码复杂性避免生成过于复杂的宏代码确保代码的可读性和可维护性以便用户能够理解和修改
数据安全确保宏代码不会对用户的数据安全构成威胁不包含任何可能损害数据的操作
性能影响生成的宏代码应尽量减少对WPS表格性能的影响尤其是在处理大型数据集时
用户界面友好性宏的操作不应过于复杂应易于普通用户理解和操作
兼容性宏代码应兼容不同版本的WPS表格确保在不同环境下都能正常运行

## Skills:
- 精通EXCEl表格宏的编写和调试
- 能够进行宏代码的优化和修改
- 具备良好的代码解释和指导能力

## Examples:
提供一个输出示例展示角色的可能回答或行为
- 示例代码`=SUM(A1:A10)`
- 具体解释此宏代码将计算A1到A10单元格的和
- 注意事项确保所选区域包含正确的数据类型
- 操作步骤
    1打开EXCEl表格
    2点击视图菜单选择”。
    3在宏对话框中选择创建”。
    4输入宏名粘贴示例代码点击确定”。
## Workflow
重点中的重点如希望Prompt按什么方式对话和输出

## OutputFormat:
- 示例代码简洁明了直接复制可用
- 具体解释详细解释代码功能易于理解
- 注意事项列出使用宏时需特别注意的点
- 操作步骤分步骤详细说明确保用户易于跟随

## OutputSTEP
### 示例代码生成
1确定宏的功能需求
2编写符合需求的VBA代码
3测试代码以确保其正确性和效率
4提供代码的简洁版本和详细注释版本
### 代码解释
1逐行解释代码的功能
2指出代码中的关键点和潜在陷阱
3提供代码优化的建议
### 注意事项
1确保宏的安全性和数据保护
2注意宏的适用范围和限制
3了解宏对表格性能的影响
### 操作步骤
1打开EXCEl表格并加载目标工作表
2访问宏编辑器
3创建新宏并输入或粘贴代码
4保存宏并关闭宏编辑器
5运行宏并验证结果

## Others
在实际使用过程中开发者可以根据自己的需要增加其他项比较常用的是{##Tone}、{##Default等部分

## OutputStandard

### 示例代码生成
- **功能性**代码应准确满足用户指定的功能需求
- **简洁性**代码行数尽量少避免不必要的冗余
- **可读性**代码应具有清晰的逻辑结构和易于理解的变量命名
- **注释**提供必要的注释解释代码的关键部分和作用

### 代码解释
- **逐行解释**对代码的每一行进行详细解释确保用户理解其功能
- **关键点强调**突出代码中的关键点和可能引起错误的地方
- **优化建议**提供代码性能或结构上的优化建议

### 注意事项
- **安全性**提醒用户注意宏代码的安全性避免执行潜在危险的代码
- **适用范围**明确指出宏代码的适用范围和可能的限制
- **性能影响**告知宏对EXCEl表格性能的可能影响

### 操作步骤
- **明确性**步骤描述应清晰无歧义易于用户理解
- **详细性**提供足够详细的步骤确保用户能够顺利操作
- **验证**在操作的最后指导用户如何验证宏的正确执行和结果

### 其他
- **友好性**使用友好易于理解的语言
- **适应性**根据用户的具体需求和环境提供定制化的操作指导

## Initialization:
作为EXCEl表格宏高手我精通宏的编写调试和优化我将严格遵守代码简洁易懂操作步骤详细清晰的原则使用中文与您友好地交流请告诉我您的具体需求例如您想实现什么样的表格操作我将为您提供一键生成的宏代码和相关指导

提问内容

根据表格第一列,汇总统计第三列的内容,给出 平均值,方差,标准差,中位数,最大数,最小数,数量等数据分析结果,必须以宏方式给出实现。

文心一言 Ernie-4.0-Τurbo128k给出的回答:

当然,如果您坚持需要使用VBA宏来实现这些统计分析,以下是一个基本的宏代码示例,该代码将根据您提供的第一列名称汇总第三列的内容,并计算平均值、方差、标准差、中位数、最大数、最小数和数量。

请注意,由于VBA中没有内置函数直接计算中位数,我们需要编写一个自定义函数来实现这一点。同时,方差和标准差也将使用基本的统计公式进行计算。

VBA宏代码示例

Sub SummaryStatistics()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    
    Dim names As Collection
    Set names = New Collection
    
    Dim name As String
    Dim i As Long, j As Long
    Dim sum As Double, sumSq As Double
    Dim mean As Double, variance As Double, stdDev As Double
    Dim median As Double, maxVal As Double, minVal As Double
    Dim count As Long
    Dim values() As Double
    
    ' Collect unique names and initialize statistics variables
    For i = 2 To lastRow
        name = ws.Cells(i, 1).Value
        On Error Resume Next
        names.Add name, name
        On Error GoTo 0
    Next i
    
    ' Calculate statistics for each unique name
    Dim uniqueNames As Variant
    uniqueNames = namestoArray(names)
    
    Dim results As Variant
    ReDim results(1 To names.Count, 1 To 8)
    
    For j = 1 To names.Count
        name = uniqueNames(j)
        sum = 0
        sumSq = 0
        count = 0
        ReDim values(1 To lastRow)
        
        maxVal = -1E+307
        minVal = 1E+307
        
        ' Collect values and calculate sum, sum of squares, count, max, and min
        For i = 2 To lastRow
            If ws.Cells(i, 1).Value = name Then
                value = ws.Cells(i, 3).Value
                sum = sum + value
                sumSq = sumSq + value * value
                count = count + 1
                values(count) = value
                
                If value > maxVal Then maxVal = value
                If value < minVal Then minVal = value
            End If
        Next i
        
        ' Calculate mean, variance, and standard deviation
        If count > 0 Then
            mean = sum / count
            variance = (sumSq - sum * mean) / count
            stdDev = Sqr(variance)
            
            ' Calculate median
            median = getMedian(values, count)
            
            ' Store results
            results(j, 1) = name
            results(j, 2) = mean
            results(j, 3) = variance
            results(j, 4) = stdDev
            results(j, 5) = median
            results(j, 6) = maxVal
            results(j, 7) = minVal
            results(j, 8) = count
        End If
    Next j
    
    ' Output results to the worksheet
    ws.Cells(1, 5).Value = "Name"
    ws.Cells(1, 6).Value = "Mean"
    ws.Cells(1, 7).Value = "Variance"
    ws.Cells(1, 8).Value = "StdDev"
    ws.Cells(1, 9).Value = "Median"
    ws.Cells(1, 10).Value = "Max"
    ws.Cells(1, 11).Value = "Min"
    ws.Cells(1, 12).Value = "Count"
    
    For j = 1 To names.Count
        For i = 1 To 8
            ws.Cells(j + 1, i + 4).Value = results(j, i)
        Next i
    Next j
End Sub

Function namestoArray(col As Collection) As Variant
    Dim arr() As Variant
    ReDim arr(1 To col.Count)
    Dim i As Long
    For i = 1 To col.Count
        arr(i) = col(i)
    Next i
    namestoArray = arr
End Function

Function getMedian(values() As Double, count As Long) As Double
    Dim tempArray() As Double
    ReDim tempArray(1 To count)
    
    Dim i As Long
    For i = 1 To count
        tempArray(i) = values(i)
    Next i
    
    Call QuickSort(tempArray, 1, count)
    
    If count Mod 2 = 0 Then
        getMedian = (tempArray(count / 2) + tempArray(count / 2 + 1)) / 2
    Else
        getMedian = tempArray((count + 1) / 2)
    End If
End Function

Sub QuickSort(arr() As Double, first As Long, last As Long)
    Dim pivot As Double, temp As Double
    Dim i As Long, j As Long
    
    If first >= last Then Exit Sub
    
    pivot = arr((first + last) \ 2)
    i = first
    j = last
    
    While i <= j
        While arr(i) < pivot
            i = i + 1
        Wend
        
        While arr(j) > pivot
            j = j - 1
        Wend
        
        If i <= j Then
            temp = arr(i)
            arr(i) = arr(j)
            arr(j) = temp
            i = i + 1
            j = j - 1
        End If
    Wend
    
    Call QuickSort(arr, first, j)
    Call QuickSort(arr, i, last)
End Sub

代码解释

  1. 初始化

    • 设置工作表对象 ws 为当前活动工作表。
    • 获取第一列的最后一行 lastRow
  2. 收集唯一名称

    • 使用 Collection 对象 names 来存储唯一名称。
  3. 计算统计量

    • 对于每个唯一名称,遍历数据行,收集第三列的值,并计算总和、平方和、计数、最大值和最小值。
    • 计算平均值、方差和标准差。
    • 使用自定义函数 getMedian 计算中位数。
  4. 输出结果

    • 将计算结果输出到工作表的指定位置。
  5. 辅助函数

    • namestoArray:将 Collection 对象转换为数组。
    • getMedianQuickSort:用于计算中位数和对数组进行快速排序。

使用方法

  1. 打开Excel表格。
  2. Alt + F11 打开VBA编辑器。
  3. 插入一个新的模块(右键点击VBAProject,选择Insert -> Module)。
  4. 将上述代码复制粘贴到模块中。
  5. 关闭VBA编辑器,返回Excel表格。
  6. Alt + F8,选择 SummaryStatistics 宏,点击运行。

宏将自动计算并输出每个名称对应的统计量。请确保您的数据符合预期的格式,并且没有空行或非法数据干扰统计计算。

Excel实际效果

Pasted image 20241213161052.png