Excel VBA两两个体距离矩阵转化为数据库格式

一、功能

  • 输入Excel数据样例:第一行、第一列分别代表研究个体,表格主体是距离矩阵,如下列数据中第二行、第三列表示ind1与ind2的距离。使用该VBA代码时需选中这一数据区域,然后再运行代码。
ind1ind2ind3
ind1NA23
ind22NA5
ind335NA
  • 输出数据格式:程序会自动新建一个“Trans_result”工作表,其中数据格式如下:
ind1ind2Distance
ind1ind22
ind1ind33
ind2ind35
  • 警告:1、确保原始数据矩阵是对称阵,否则不符合实际意义;2、确保运行代码前,Excel中没有名为“Trans_result”的工作表(Worksheet)。

二、VBA代码

Sub mat_to_data()
    Dim Sht As Worksheet
    Dim Rng As Range
    Dim choice As Boolean
    Set Rng = Selection
    
    If Rng.Rows.Count <> Rng.Columns.Count Then
        choice = MsgBox("选择区域不是矩阵", vbCritical)
        GoTo fail:
    End If
    Set Sht = Sheets.Add()
    Sht.Name = "Trans_result"
    Range("A1").Select
    ActiveCell.Value = "Ind1"
    ActiveCell.Offset(0, 1).Value = "Ind2"
    ActiveCell.Offset(0, 2).Value = "Distance"
    ActiveCell.Offset(1, 0).Select
    
    For Each cell In Rng
        If (cell.Row > Rng.Cells(1, 1).Row) And (cell.Column _
            > Rng.Cells(1, 1).Column) And ((cell.Row - Rng.Cells(1, 1).Row) < _
            (cell.Column - Rng.Cells(1, 1).Column)) Then
            ActiveCell.Value = cell.Offset(0, Rng.Cells(1, 1).Column - cell.Column).Value
            ActiveCell.Offset(0, 1) = cell.Offset(Rng.Cells(1, 1).Row - cell.Row, 0).Value
            ActiveCell.Offset(0, 2) = cell.Value
            ActiveCell.Offset(1, 0).Select  
        End If
    Next cell
fail:
End Sub
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HaoranWu_ZJU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值